Microsoft.AspNet.Identity 的简单使用
2013-12-26 15:27
399 查看
要完成一个简单的注册,登陆,至少需要实现Identity中的3个接口
之后实现一个Store,同时实现上面的两个接口,具体的实现下面再详细说明
在Microsoft.AspNet.Identity.Core.dll中,提供了一个用于操作管理的类
登陆时,有2步
1.判断登陆名密码是不是正确
2.设置登陆(如cookie等)
需要注意的是这个方法
这个方法是在注册的时候就会用到的,他的作用是把明文的密码设置成密文的密码,所以你只要设置user的密码属性为passwordHash即可,并不需要在这里进行持久化
以上是一个简单的注册登陆使用Identity的实现
他和以前自己实现的思路基本是差不多的。
但是,从Identity的意义来说,对同一个人(IUser),他应该是有多种不同的登陆方式的
如:直接输入用户密码,使用QQ账号,使用微博账号等。
所以,我猜测Identity中的IUserLoginStore<TUser>就是干这个用的。
目前还没有更深入的研究
IUser
IUserStore<TUser>:IDisposablewhereTUser:IUser
IUserPasswordStore<TUser>:IUserStore<TUser>,IDisposablewhereTUser:IUser
其中IUser是实体,默认需要实现id和name两个属性
IUserStore是对User的crud,IUserPasswordStore是对密码的操作
在Identity中,密码不是必须的。
PS:目前没有深入了解为什么密码不是必须的,但是初步想来是因为要与oauth接口第三方平台提供的登陆,oauth的情况下本地可能是不存储密码的
publicclassTestUser:IUser
{
publicTestUser()
{
Id=Guid.NewGuid().ToString();
}
publicstringId{get;set;}
publicstringUserName{get;set;}
publicstringElseProperty{get;set;}
publicstringPasswd{get;set;}
}
简单的实现一个IUser,这里我们还是要保存密码的
publicclassTestUesrStore:IUserStore<TestUser>,IUserPasswordStore<TestUser>
之后实现一个Store,同时实现上面的两个接口,具体的实现下面再详细说明
在Microsoft.AspNet.Identity.Core.dll中,提供了一个用于操作管理的类
publicclassUserManager<TUser>:IDisposablewhereTUser:IUser
其构造函数需要一个参数,类型为IUserStore<TUser>
publicUserManager(IUserStore<TUser>store)
在controller中,我们可以实例化这个UserManager
UserManager=newUserManager<TestUser>(newTestUesrStore());
UserManager是一个private变量,来保存这个实例
之后我们使用UserManager来完成对应的功能
以注册为例:
UserManager本身有CreateAsync方法,而扩展方法有Create。不管是那种,都有2种重载
publicvirtualasyncTask<IdentityResult>CreateAsync(TUseruser)
publicvirtualasyncTask<IdentityResult>CreateAsync(TUseruser,stringpassword)
一种是传密码的,一种是不传密码的。不论那种,最终会调用Store(IUserStore)的CreateAsync方法去持久化。区别在于传密码的还要调用IUserPasswordStore中的方法去处理密码相关的东西
下面是相对完整的代码
varuser=newTestUser{
UserName=uname,
Passwd=passwd,
ElseProperty=elsepro
};
varresult=awaitUserManager.CreateAsync(user,passwd);
if(result.Succeeded)
{
returnRedirectToAction("login");
}
登陆时,有2步
1.判断登陆名密码是不是正确
2.设置登陆(如cookie等)
varuser=awaitUserManager.FindAsync(name,passwd);
判断user是不是null可知用户密码是否正确
如何设置cookie呢,从mvc5的示例中可以找到。与owin相关,这里不做详细说明。
下面具体说一下IUserStore和IUserPasswordStore的实现
所有的方法,返回都是Task,根据方法名基本可以猜到干什么,大都是读写库操作
你可以newTask返回,但是注意,在返回之前要调用task的Start方法来让task执行,否则会卡主
另外,还可以使用Task.FromResult来返回,可参考Microsoft.AspNet.Identity.EntityFramework.dll中UserStore的实现方法
publicTaskSetPasswordHashAsync(TestUseruser,stringpasswordHash)
需要注意的是这个方法
这个方法是在注册的时候就会用到的,他的作用是把明文的密码设置成密文的密码,所以你只要设置user的密码属性为passwordHash即可,并不需要在这里进行持久化
vart=newTask(()=>
{
user.Passwd=passwordHash;
});
t.Start();
returnt;
或者
user.Passwd=passwordHash;
returnTask.FromResult<int>(0);
以上是一个简单的注册登陆使用Identity的实现
他和以前自己实现的思路基本是差不多的。
但是,从Identity的意义来说,对同一个人(IUser),他应该是有多种不同的登陆方式的
如:直接输入用户密码,使用QQ账号,使用微博账号等。
所以,我猜测Identity中的IUserLoginStore<TUser>就是干这个用的。
目前还没有更深入的研究
相关文章推荐
- ASP.NET Identity简介及简单使用
- Asp.Net MVC 5使用Identity之简单的注册和登陆
- Asp.Net MVC 5使用Identity之简单的注册和登陆
- Microsoft.AspNet.Identity 自定义使用现有的表—登录实现
- ASP.NET Identity简介及简单使用
- ASP.NET Identity简介及简单使用
- ASP.NET Identity简介及简单使用
- ASP.Net MVC_DotNetZip简单使用方法,解决文件压缩的问题[转]
- asp.net中使用ajax简单例子
- ASP.NET 中使用WebServer进行调试时,自定义的Identity出现 SerializationException的解决方法
- asp.net core视图组件(ViewComponent)简单使用
- ASP.NET MVC 中使用Spring.NET实现简单的属性注入
- 依赖注入框架Autofac的简单使用,以及在 ASP.NET MVC 中的使用
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建输出验证码图片的控制器
- 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之用户管理(2)
- Asp.Net使用POST方法最简单的实现
- Asp.Net MVC Identity 2.2.1 使用技巧(三)
- ASP.NET使用确认对话框得简单方法
- Asp.Net使用POST方法最简单的实现
- ASP.NET Core的身份认证框架IdentityServer4(8)- 使用密码认证方式控制API访问