Microsoft.AspNet.Identityの簡単な使用

11602 ワード

簡単な登録、ログインを完了するには、少なくともIdentityの3つのインタフェースを実装する必要があります.
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はこれをやっていると思います.
 
今のところまだもっと深い研究はない.