2013-02-21 31 views
6

Tôi chỉ muốn yêu cầu trợ giúp để kịch bản của tôi hoạt động? Tôi muốn lấy UserName bằng PasswordResetToken.WebMatrix.WebData.WebSecurity - Làm cách nào tôi có thể nhận UserName bằng cách chỉ có PasswordResetToken

Đây là kịch bản của tôi.

  1. Tôi có tính năng quên mật khẩu trong trang web của mình sẽ gửi email mật khẩu được gửi lại mật khẩu thay đổi cho người dùng.
  2. Tôi chỉ muốn gửi chuỗi mật khẩu được chỉ định.
  3. Khi người dùng nhấp vào liên kết. Tôi sẽ chỉ truy vấn yêu cầu ["token"] để lấy tên người dùng và sau đó sẽ cho phép người dùng thay đổi mật khẩu và autologin.

    đây là mã của tôi dưới đây:

    public ActionResult ChangePassword() 
    { 
        ChangePasswordModel model = new ChangePasswordModel(); 
        string token=string.Empty; 
        try 
        { 
         token = Request["token"].ToString(); 
         int userId = WebSecurity.GetUserIdFromPasswordResetToken(token); 
    
         if (userId > 0) 
         { 
          //Get the user object by (userid) 
          //??????????????????? 
          //??????????????????? 
         } 
         else 
         { 
          throw new Exception("The change password token has expired. Please go to login page and click forgot password again."); 
         } 
        } 
        catch 
        { 
         model.HasError = true; 
         ModelState.AddModelError("", "The change password token has expired. Please go to login page and click forgot password again."); 
        } 
    
        return View(model); 
    } 
    

Cảm ơn bạn trước.

Trả lời

9

Xem nhận xét ở cuối bài viết này: WebSecurity.GeneratePasswordResetToken Method.

tôi sẽ sao chép các phần có liên quan thuận tiện cho bạn:

Nếu người dùng đã quên mật khẩu của họ, họ có thể yêu cầu một hình mới. Để cung cấp mật khẩu mới, hãy làm như sau:

  1. Tạo trang đặt lại mật khẩu có trường nơi người dùng có thể nhập địa chỉ email của họ.
  2. Khi người dùng đã nhập địa chỉ email của họ vào trang đặt lại mật khẩu, hãy xác minh rằng địa chỉ email đại diện cho người dùng hợp lệ. Nếu có, hãy tạo mã thông báo đặt lại mật khẩu bằng cách gọi phương thức GeneratePasswordResetToken (String, Int32).
  3. Tạo siêu liên kết trỏ đến trang xác nhận trong trang web của bạn và bao gồm mã thông báo dưới dạng tham số chuỗi truy vấn trong URL của liên kết.
  4. Gửi liên kết tới người dùng trong email. Khi người dùng nhận được email, họ có thể nhấp vào liên kết để gọi trang xác nhận .
  5. Tạo trang xác nhận trích xuất mã thông báo từ thông số URL và cho phép người dùng nhập mật khẩu mới.
  6. Khi người dùng gửi mật khẩu mới, hãy gọi phương thức ResetPassword (Chuỗi, Chuỗi) và chuyển mã thông báo đặt lại mật khẩu và mật khẩu mới. Nếu mã thông báo hợp lệ, mật khẩu sẽ được đặt lại. Nếu mã thông báo không hợp lệ (ví dụ: mã thông báo đã hết hạn), hiển thị thông báo lỗi.

Làm nổi bật là của tôi. Về cơ bản bạn không cần tên người dùng. Khung làm tất cả việc nâng hạng nặng cho bạn. Đây là một cách hay để họ đăng nhập theo cách thủ công để kiểm tra xem mật khẩu thay đổi điều này có thực sự hiệu quả hay không, và không khám phá ra rằng nó không chỉ là lần tiếp theo xung quanh. .

Dù sao, bạn có thể làm điều này:

SimpleMembershipProvider provider = (SimpleMembershipProvider)Membership.Provider; 
string username = provider.GetUserNameFromId(userId); 

tham khảo: GetUserNameFromId.

+0

Hi zespri, cảm ơn bạn đã trả lời nhanh chóng. nhưng tôi muốn người dùng đăng nhập sau khi anh ta/cô ấy thay đổi mật khẩu. –

+0

@NETExperts: Tôi đã chỉnh sửa câu trả lời để giải quyết nhận xét của bạn. –

+0

tuyệt vời! sẽ kiểm tra điều này. cảm ơn. –

1

Tôi nghĩ phương pháp WebSecurity.GetUserIdFromPasswordResetToken(string token) làm những gì bạn muốn.

Thông tin thêm here.

Cập nhật:

Xin lỗi nhưng tôi không thấy rằng bạn đã được sử dụng phương pháp đó ... Vì vậy, nếu bạn muốn có được tên người dùng và bạn đang sử dụng mã di cư đầu tiên của Entity Framework, bạn có thể nhận tên người dùng có biểu thức LINQ sau:

string username = yourDbContext.UserProfiles.FirstOrDefault(up=>up.UserId == userId).Username; 
+0

ok, tôi sẽ thử. cảm ơn –

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