Microsoft.AspNet.Identityの簡単な使用
11602 ワード
簡単な登録、ログインを完了するには、少なくともIdentityの3つのインタフェースを実装する必要があります.
後に1つのStoreを実現し、同時に上の2つのインタフェースを実現し、具体的な実現は以下で詳細に説明する.
MicrosoftでAspNet.Identity.Core.dllでは、操作管理のためのクラスが提供されています.
上陸時、2ステップあり
1.ログイン名パスワードが正しいかどうかを判断する
2.ログインの設定(クッキーなど)
注意しなければならないのはこの方法です
この方法は登録時に使用され、明文のパスワードを暗号化する役割を果たすので、userのパスワード属性をpasswordHashに設定すればよいので、ここで永続化する必要はありません.
以上は簡単な登録ログインにIdentityを使用する実装です
彼と以前自分で実現した構想は基本的にあまり違わない.
しかし、Identityの意味から言えば、同じ人(IUser)に対して、彼はいろいろな上陸方式を持っているはずだ.
例えば、ユーザーのパスワードを直接入力したり、QQアカウントを使用したり、微博アカウントを使用したりします.
だから、IdentityのIUserLoginStoreはこれをやっていると思います.
今のところまだもっと深い研究はない.
IUser
IUserStore<TUser> : IDisposable where TUser : IUser
IUserPasswordStore<TUser> : IUserStore<TUser>, IDisposable where TUser : IUser
IUser , id name
IUserStore User crud,IUserPasswordStore
Identity , 。
PS: , oauth ,oauth
public class TestUser:IUser
{
public TestUser()
{
Id = Guid.NewGuid().ToString();
}
public string Id { get; set; }
public string UserName { get; set; }
public string ElseProperty { get; set; }
public string Passwd { get; set; }
}
IUser,
public class TestUesrStore:IUserStore<TestUser>,IUserPasswordStore<TestUser>
後に1つのStoreを実現し、同時に上の2つのインタフェースを実現し、具体的な実現は以下で詳細に説明する.
MicrosoftでAspNet.Identity.Core.dllでは、操作管理のためのクラスが提供されています.
public class UserManager<TUser> : IDisposable where TUser : IUser
, IUserStore<TUser>
public UserManager(IUserStore<TUser> store)
controller , UserManager
UserManager = new UserManager<TestUser>(new TestUesrStore());
UserManager private ,
UserManager
:
UserManager CreateAsync , Create。 , 2
public virtual async Task<IdentityResult> CreateAsync(TUser user)
public virtual async Task<IdentityResult> CreateAsync(TUser user, string password)
, 。 , Store(IUserStore) CreateAsync 。 IUserPasswordStore
var user = new TestUser {
UserName=uname,
Passwd=passwd,
ElseProperty=elsepro
};
var result =await UserManager.CreateAsync(user, passwd);
if (result.Succeeded)
{
return RedirectToAction("login");
}
上陸時、2ステップあり
1.ログイン名パスワードが正しいかどうかを判断する
2.ログインの設定(クッキーなど)
var user = await UserManager.FindAsync(name, passwd);
user null
cookie , mvc5 。 owin , 。
IUserStore IUserPasswordStore
, Task, ,
new Task , , task Start task ,
, Task.FromResult , Microsoft.AspNet.Identity.EntityFramework.dll UserStore
public Task SetPasswordHashAsync(TestUser user, string passwordHash)
注意しなければならないのはこの方法です
この方法は登録時に使用され、明文のパスワードを暗号化する役割を果たすので、userのパスワード属性をpasswordHashに設定すればよいので、ここで永続化する必要はありません.
var t= new Task(() =>
{
user.Passwd = passwordHash;
});
t.Start();
return t;
user.Passwd = passwordHash;
return Task.FromResult<int>(0);
以上は簡単な登録ログインにIdentityを使用する実装です
彼と以前自分で実現した構想は基本的にあまり違わない.
しかし、Identityの意味から言えば、同じ人(IUser)に対して、彼はいろいろな上陸方式を持っているはずだ.
例えば、ユーザーのパスワードを直接入力したり、QQアカウントを使用したり、微博アカウントを使用したりします.
だから、IdentityのIUserLoginStore
今のところまだもっと深い研究はない.