2013-12-14 182 views
11

用戶已經登錄,並希望做一些事情重大,我希望他們能夠重新輸入密碼,這樣我就可以確保他們是已登錄用戶新輸入的密碼。驗證的登錄用戶

我怎樣才能確認這個密碼是用於賬戶持有人的?

很高興知道如何通過ASP.NET身份來完成它,或者如何設置一個存儲過程以對抗AspNetUsers表或者如何通過實體框架來完成。

回答

12

如何確認此密碼是否爲帳戶持有人?

如何通過ASP.NET身份

做重新驗證當前登錄用戶的密碼,爲用戶提供VerifyView輸入密碼,並用下面的方法來檢查用戶是否存在。

var user = await UserManager.FindAsync(User.Identity.Name,VerifyViewModel.Password)

如果找到該用戶,當前請求是從帳戶持有人是相同的。


Membership.ValidateUser是會員框架的早期版本,而不是從ASP.NET身份。

+0

出於某種原因,我希望CheckPassword來做到這一點。它不..這很好,謝謝。 – Bobby

4

使用Identity框架,您永遠不想直接訪問數據庫。始終使用提供的API。過去幾年來,數據庫結構發生了多次變化,因此引入依賴關係(例如,在數據上下文中)無故添加工作。

有關異步使用情況,請參見已由jd4u提供的答案。

對於同步識別密碼當前用戶相匹配,您需要首先包括:

using Microsoft.AspNet.Identity; 

,因爲這帶來了一些身份框架同步擴展方法

可以再用Find檢查的UserManager這樣的:

var user = UserManager.Find(User.Identity.Name, password); 
if (user != null) 
{ 
    // It is them! 
} 

如果用戶不爲空,那麼你有一個匹配的密碼和當前用戶名的。

3

您還可以使用UserManager.CheckPassword()擴展功能:

UserManagerExtensions.CheckPassword Method

string id = User.Identity.GetUserId(); 
var user = UserManager.FindById(id); 
if(!UserManager.CheckPassword(user, model.Password)) 
{ 
    ModelState.AddModelError("Password", "Incorrect password."); 
} 
0

您可以使用的UserManager做到這一點:

if(UserManager.PasswordHasher.VerifyHashedPassword("hashedPassword", "password") 
    != PasswordVerificationResult.Failed) 
{ 
    // password is correct 
} 

欲瞭解更多信息,請參閱鏈接: How to check password manually in Asp.Net identity 2?