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(); } } }