2013-12-14 22 views
11

Người dùng đã đăng nhập và muốn làm điều gì đó lớn và tôi muốn họ nhập lại mật khẩu của họ để tôi có thể đảm bảo rằng họ là người dùng đã đăng nhập.Xác minh mật khẩu mới được nhập của người dùng đã đăng nhập

Tôi làm cách nào để xác nhận rằng mật khẩu này dành cho chủ tài khoản?

Sẽ rất vui khi biết cách thực hiện thông qua ASP.NET Identity hoặc cách thiết lập một proc được lưu trữ để chống lại bảng AspNetUsers hoặc cách thực hiện thông qua Khuôn khổ thực thể.

Trả lời

12

Tôi làm cách nào để xác nhận rằng mật khẩu này dành cho chủ tài khoản?

làm thế nào để làm điều đó thông qua ASP.NET nhận dạng

Để minh lại mật khẩu của hiện đang đăng nhập người dùng, cung cấp cho người dùng VerifyView nhập mật khẩu và sử dụng các phương pháp sau đây để kiểm tra xem người dùng tồn tại.

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

Nếu người dùng được tìm thấy, các yêu cầu hiện tại là như nhau từ chủ tài khoản.


Membership.ValidateUser là phiên bản cũ hơn của khung thành viên chứ không phải từ ASP.NET Identity.

+0

Vì lý do nào đó, tôi dự kiến ​​CheckPassword sẽ thực hiện việc này. Nó không .. Điều này hoạt động nhờ tuyệt vời. – Bobby

4

Với khuôn khổ Identity bạn không bao giờ muốn nhấn trực tiếp vào cơ sở dữ liệu. Luôn sử dụng API được cung cấp. Cấu trúc cơ sở dữ liệu đã thay đổi nhiều lần trong vài năm qua, do đó, việc giới thiệu các phụ thuộc (ví dụ: trên ngữ cảnh dữ liệu) là thêm công việc không có lý do.

Để sử dụng không đồng bộ, hãy xem câu trả lời đã được cung cấp bởi jd4u.

Đối đồng bộ xác định rằng mật khẩu phù hợp với người sử dụng hiện tại, bạn cần phải đầu tiên bao gồm:

using Microsoft.AspNet.Identity; 

vì điều này mang lại một số đồng bộ phương pháp khuyến nông cho khung bản sắc.

Sau đó bạn có thể kiểm tra với Find trên UserManager như thế này:

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

Nếu người dùng không phải là null, sau đó bạn có một trận đấu của mật khẩu và tên người dùng hiện tại.

3

Bạn cũng có thể sử dụng UserManager.CheckPassword() chức năng mở rộng:

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

Bạn có thể sử dụng UserManager để làm điều đó:

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

Để biết thêm thông tin xem liên kết: How to check password manually in Asp.Net identity 2?

Các vấn đề liên quan