Asp.net-Mvc-5

SetPasswordHashAsync 在 MVC 5 的 IPasswordStore 中必須完成的所有事情是什麼?

  • November 21, 2015

嘗試在新的 asp.net mvc 5 中實現 IPasswordStore 讓我有些困惑。我想使用自己的 ORM。

從在範例項目中使用“註冊”螢幕時執行的腳手架“AccountController”中獲取這個熟悉的程式碼片段。

public async Task<ActionResult> Register(RegisterViewModel model)
   {
       if (ModelState.IsValid)
       {
           var user = new ApplicationUser() { UserName = model.UserName };
           var result = await UserManager.CreateAsync(user, model.Password);
           if (result.Succeeded)
           {
               await SignInAsync(user, isPersistent: false);
               return RedirectToAction("Index", "Home");
           }
           else
           {
               AddErrors(result);
           }
       }

       // If we got this far, something failed, redisplay form
       return View(model);
   }

 var result = await UserManager.CreateAysnc(user, model.Password)

行首先呼叫 IPasswordStore 函式

 public Task SetPasswordHashAsync(TUser user, string passwordHash)

無需先從 IUserStore 呼叫

  public Task CreateAsync(TUser user)

如果使用者尚未在數據庫中創建,如何設置密碼雜湊?此外,我們實際上甚至不知道我們是否可以創建提議的“使用者”,因為我們還沒有檢查使用者名是否已被使用

  public Task<TUser> FindByNameAsync(string userNameIn)

之後立即呼叫。

有任何想法嗎?

您注意到在創建使用者之前您可能不應該為使用者保留密碼雜湊是正確的。您可以將密碼雜湊保存到一個位置,如果使用者實際上並未創建,該位置將被還原。在創建和儲存使用者之前,不應儲存密碼,即在CreateAsync(TUser user).

EntityFramework 實現中的 IdentityUser 就是這樣一個位置,它使您能夠在 CreateAsync 方法中儲存使用者和密碼資訊。我並不是說您應該引用 Identity.EntityFramework 程序集,只是說具有類似於 IdentityUser 的 User 和 PasswordHash 資訊的 User 對像是一種可能的解決方案。

引用自:https://stackoverflow.com/questions/20161598