2016-10-11 172 views
-2

我有通過搜索電子郵件,並確保它不存在,創建一個用戶,並創建了一個用戶等級:更改ASP.NET身份密碼

public async Task EnsureSeedDataAsync() 
    { 
     if (await _userManager.FindByEmailAsync("[email protected]") == null) 
     { 
      // Add the user. 
      var newUser = new CRAMSUser() 
      { 
       UserName = "test", 
       Email = "[email protected]" 
      }; 

      await _userManager.CreateAsync(newUser, "[email protected]!"); 
     } 
    } 

我試圖創建另一個類使用相同的方法更改密碼,但我很困惑如何創建一個currentUser對象以傳遞給RemovePassword和AddPassword調用。這是我到目前爲止有:

public async Task ChangePassword() 
    { 
     if (await _userManager.FindByEmailAsync("[email protected]") != null) 
     { 
      _userManager.RemovePasswordAsync(currentUser); 

      _userManager.AddPasswordAsync(currentUser, "newPassword"); 
     } 
    } 

有人請告訴我在正確的方向,因爲我是新來這個,不知道如何轉移currentUser對象,包含正在電子郵件搜索。

回答

2

FindByEmailAsyc返回用戶對象,您需要將其保存到變量並將其傳遞給其他userManager調用。另外,RemovePasswordAddPassword方法將User對象的關鍵值作爲參數,而不是整個User對象。

public async Task ChangePassword() 
{ 

    var currentUser = await _userManager.FindByEmailAsync("[email protected]") 
    if (currentUser != null) 
    { 
     _userManager.RemovePasswordAsync(currentUser.Id); 

     _userManager.AddPasswordAsync(currentUser.Id, "newPassword"); 
    } 
} 
+1

如果第二次操作失敗,那麼在兩個操作中執行操作並不好,用戶無法使用密碼 – Tseng

+1

是的,使用ChangePasswordAsync方法可能會更好,但我認爲這超出了原始問題的範圍。 – jmoerdyk

1

請參閱我的回答this question。它允許只用userId &新密碼更改密碼,這對於允許管理員設置用戶密碼並在單個事務中執行該密碼很有用。

它歸結爲創建一個直接調用底層用戶存儲的新方法。