Asp.Net.Identity认证不依赖Entity Framework实现方式

Asp.Net.Identity为何物请自行搜索,也可转向此文章http://www.cnblogs.com/shanyou/p/3918178.html

本来微软已经帮我们将授权、认证以及数据库存储都一一处理好了。但是总有这种情况,如我们现在的项目是已经存在了数据库,且库里已经有用户、角色等信息表,但是

我们还是贪心想使用微软的授权、认证类库。这里我就来实际实践下到底可行不可行~

第一步、新建一个Asp.Net MVC框架的web工程

第二部、Nuget上安装Microsoft.AspNet.Identity、Microsoft.AspNet.Identity.Owin

其中Microsoft.AspNet.Identity.Owin有依赖项,它依赖了这几个包:

Microsoft.Owin.Security.OAuth      MSDN注解:包含与 OAuth 提供程序相关的类型。(详细信息参考 https://msdn.microsoft.com/zh-cn/library/microsoft.owin.security.oauth(v=vs.111).aspx)

Microsoft.Owin.Security.Cookies   MSDN注解:提供与身份 cookie 相关的类型。     (详细信息参考 https://msdn.microsoft.com/zh-cn/library/microsoft.owin.security.cookies(v=vs.111).aspx)

Microsoft.Owin.Security                 MSDN注解:包含与身份验证相关的类型。         (详细信息参考 https://msdn.microsoft.com/zh-cn/library/microsoft.owin.security(v=vs.111).aspx)

Microsoft.AspNet.Identity.Core      MSDN注解:包含与管理 ASP.NET Identity 的用户和角色相关的类和接口。

(信息信息参考:https://msdn.microsoft.com/library/microsoft.aspnet.identity(v=vs.111).aspx)

从MSDN的注解可以看出来Microsoft.AspNet.Identity.Owin里其实就是将网站的登录、注册业务场景所需的API进行了封装;

第三部、建模

如我现在的数据库的用户表为BASE_USER,表结构如下

CREATE TABLE [dbo].[BASE_USER](
	[ID] [uniqueidentifier] NOT NULL PRIMARY KEY,
	[NAME] [varchar](50) NOT NULL,
	[PWD] [varchar](50) NOT NULL,
) ON [PRIMARY]

  

我们在工程站点的Models文件夹里新建一个BASE_USER类,让它继承Microsoft.AspNet.Identity.IUser<GUID>,这里我们加一个数据表不存在的NICKNAME昵称字段,到后面看看会有什么效果~

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace IdeintityDemo.Models
{
    public class BASE_USER : Microsoft.AspNet.Identity.IUser<Guid>
    {
        /// <summary>
        /// 用户编号
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string PWD { get; set; }
        /// <summary>
        /// 昵称
        /// </summary>
        public string NickName { get; set; }
    }
}

第四部 创建UserStore类,该类通过继承接口IUserStore来实现用户存储在数据库的api

using Microsoft.AspNet.Identity;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using IdeintityDemo.Models;
using IdeintityDemo.Common;

namespace IdeintityDemo.Identity
{

    public class HsUserStore: Microsoft.AspNet.Identity.IUserStore<BASE_USER, Guid>
    {
        /// <summary>
        /// 创建用户
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public Task CreateAsync(BASE_USER user)
        {
            return Task.Run(() => {
            string sql = @"INSERT INTO [dbo].[BASE_USER]([ID],[NAME],[PWD])
                        VALUES(@UserID,@name,@pwd)";
                SqlParameter[] parameters = {
                     new SqlParameter("@UserID", user.Id),
                     new SqlParameter("@name", user.UserName),
                     new SqlParameter("@pwd", user.PWD)
                };
                int iResult = DbHelperSQL.ExecuteSql(sql, parameters);
            });
        }
        /// <summary>
        /// 删除用户
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public Task DeleteAsync(BASE_USER user)
        {
            return Task.Run(()=> {
                string sql = @"DELETE FROM [dbo].[BASE_USER] WHERE [email protected]";
                SqlParameter[] parameters = {
                     new SqlParameter("@UserID", user.Id)};
                int iResult = DbHelperSQL.ExecuteSql(sql, parameters);
            });
        }
        /// <summary>
        /// 根据用户id获取用户
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        public Task<BASE_USER> FindByIdAsync(Guid userId)
        {
            return Task<BASE_USER>.Run(() =>
             {
                 BASE_USER result = new BASE_USER();
                 string sql = @"SELECT * FROM [dbo].[BASE_USER] WHERE [email protected]";
                 SqlParameter[] parameters = {
                     new SqlParameter("@UserID", userId)};
                 List<BASE_USER> list = new List<BASE_USER>();
                 using (IDataReader data = DbHelperSQL.ExecuteReader(sql, parameters))
                 {
                     while (data.Read())
                     {
                         //model
                         BASE_USER user = new BASE_USER();
                         user.Id = Guid.Parse(data["ID"].ToString());
                         user.UserName = data["NAME"].ToString();
                         user.PWD = data["PWD"].ToString();
                         list.Add(user);
                     }
                 }
                 return list.FirstOrDefault();
             });
        }
        /// <summary>
        /// 根据名称获取用户信息
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        public Task<BASE_USER> FindByNameAsync(string userName)
        {
            return Task<BASE_USER>.Run(() =>
            {
                BASE_USER result = new BASE_USER();
                string sql = @"SELECT * FROM [dbo].[BASE_USER] WHERE [email protected]";
                SqlParameter[] parameters = {
                     new SqlParameter("@NAME", userName)};
                List<BASE_USER> list = new List<BASE_USER>();
                using (IDataReader data = DbHelperSQL.ExecuteReader(sql, parameters))
                {
                    while (data.Read())
                    {
                        //model
                        BASE_USER user = new BASE_USER();
                        user.Id = Guid.Parse(data["ID"].ToString());
                        user.UserName = data["NAME"].ToString();
                        user.PWD = data["PWD"].ToString();
                        list.Add(user);
                    }
                }
                return list.FirstOrDefault();
            });
        }
        /// <summary>
        /// 更新用户
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public Task UpdateAsync(BASE_USER user)
        {
            return Task.Run(() =>
            {
                //省略...
            });
        }
        /// <summary>
        /// 释放
        /// </summary>
        public void Dispose()
        {
            throw new NotImplementedException();
        }

    }
}
时间: 2024-11-06 15:29:35

Asp.Net.Identity认证不依赖Entity Framework实现方式的相关文章

Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用

ORM作为一种数据库访问机制已广泛地应用于各种项目当中,在.Net开发中,应用比较广泛的ORM框架大致有下面几个: 官方支持的有:Linq to SQL,Entity Framework.三方的有:NHibernate.前面介绍过Linq to SQL的应用,这篇介绍一下Entity Framework在Asp.Net MVC4中的应用. 首先用Visual Studio(2012或2013,其它版本需要安装Asp.Net MVC4)创建一个Asp.Net MVC4的项目,项目创建完成后会发现E

3、ASP.NET MVC入门到精通——Entity Framework增删改查

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 这里我接上讲Entity Framework入门.从网上下载Northwind数据库,新建一个控制台程序,然后重新添加一个ado.net实体数据模型. EF中操作数据库的"网关"(操作上下文) DBContext封装 .NET Fra

【ASP.NET Identity系列教程(三)】Identity高级技术

注:本文是[ASP.NET Identity系列教程]的第三篇.本系列教程详细.完整.深入地介绍了微软的ASP.NET Identity技术,描述了如何运用ASP.NET Identity实现应用程序的用户管理,以及实现应用程序的认证与授权等相关技术,译者希望本系列教程能成为掌握ASP.NET Identity技术的一份完整而有价值的资料.读者若是能够按照文章的描述,一边阅读.一边实践.一边理解,定能有意想不到的巨大收获!希望本系列博文能够得到广大园友的高度推荐. 15 Advanced ASP

自定义ASP.NET Identity(三)- 实现自定义MySQL ASP.NET Identity存储提供程序

ASP.NET Identity是一个可扩展的系统,你可以创建属于你自己的存储提供程序并且将它集成到你的应用中,而不需要重构你的应用.本章将介绍如何创建一个ASP.NET Identity的MySQL存储提供程序.关于如何创建自定义存储提供程序的概述请查看自定义ASP.NET Identity(一)- 自定义ASP.NET Identity存储提供程序.要完成这个指南,你必须安装Visual Studio 2013 Update 2. 这个指南将包含如下内容: 怎样在Azure上创建MySQL数

Asp.Net Identity,Entity Framework 与 Sqlite

1.Asp.Net Identity核心引用 Microsoft.AspNet.Identity.Core  核心库,包含Identity的主要功能. Microsoft.AspNet.Identity.EntityFramework 主要包括ASP.NET Identity 的EF 部分的实现. Microsoft.AspNet.Identity.OWIN ASP.NET Identity对OWIN 的支持. 安装方式:创建Asp.Net Web 时选择身份验证或者使用NuGet安装 通过在P

Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1

这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Framework没有任何的了解.读完本篇教程,你将会理解如何使用Entity Framework来选择.插入.更新和删除数据库记录. Microsoft Entity Framework是一个对象关系映射(O/RM)工具,它能你让自动从数据库生成数据访问层.Entity Framework能够使你免于手工

Asp.Net MVC Entity Framework

Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1 这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Framework没有任何的了解.读完本篇教程,你将会理解如何使用Entity Framework来选择.插入.更新和删除数据库记录. Microsoft Entity Framework是一个对象关系映射(O

ASP.NET Core 1.0、ASP.NET MVC Core 1.0和Entity Framework Core 1.0

ASP.NET 5.0 将改名为 ASP.NET Core 1.0 ASP.NET MVC 6  将改名为 ASP.NET MVC Core 1.0 Entity Framework 7.0    将改名为 Entity Framework Core 1.0 .NET新的跨平台版本将命名为.NET Core 1.0 新版本的ASP.NET和Entity Framework有一个严重的问题,就是它们同以前的版本不兼容.这不只是行为或API稍有差异的事,而基本上是进行了完全的重写,去掉了大量的功能.

Asp.Net MVC 模型(使用Entity Framework创建模型类)

这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Framework没有任何的了解.读完本篇教程,你将会理解如何使用Entity Framework来选择.插入.更新和删除数据库记录. Microsoft Entity Framework是一个对象关系映射(O/RM)工具,它能你让自动从数据库生成数据访问层.Entity Framework能够使你免于手工