2014-05-22 30 views
8

Tôi muốn xác thực mã thông báo đặt lại mật khẩu theo cách thủ công trong ASP.NET Identity 2.0. Tôi đang cố gắng để tạo ra phiên bản của riêng tôi của UserManager.ResetPasswordAsync(string userId, string token, string newPassword) rằng mất và IdentityUser thay vì userId như thế này:Xác thực thủ công mã thông báo đặt lại mật khẩu trong ASP.NET Identity

UserManager.ResetPasswordAsync(IdentityUser user, string token, string newPassword) 

Không chắc chắn nếu tôi đang làm điều này đúng, nhưng ở đây tôi đang cố gắng để xác thực mã đã được gửi đến người dùng trong bước trước đó. Tôi đã không sửa đổi mã/mã thông báo gửi email cho người dùng và tạo mã. Tôi giả định đây là phương pháp chính xác để gọi, nhưng đối số purpose là không chính xác. (Tôi đã thử đi qua "ASP.NET Identity" nhưng không có con xúc xắc.)

if (await userManager.UserTokenProvider.ValidateAsync(purpose: "?", token: code, manager: userManager, user: user)) 
{ 
    return IdentityResult.Success; 
} 
else 
{ 
    return new IdentityResult("Invalid code."); 
} 

Nếu ai đó có thể điền vào tôi trong vào các chi tiết về cách hoạt động ra khỏi hộp, hoặc điểm tôi vào mã nguồn của Microsoft cho rằng UserManager.ResetPasswordAsync(IdentityUser user, string token, string newPassword) sẽ được đánh giá cao nhất!

Trả lời

3

Dường như mã cho Microsoft.AspNet.Identity vẫn chưa mở nguồn gốc hay theo kho Codeplex nằm tại địa chỉ:

https://aspnetidentity.codeplex.com/SourceControl/latest#Readme.markdown

Hiện nay, mã khung ASP.NET nhận dạng là không công khai và do đó sẽ không được xuất bản trên trang web này. Tuy nhiên, chúng tôi đang lập kế hoạch để thay đổi điều đó và ngay sau khi chúng tôi có thể, mã sẽ được xuất bản trong kho lưu trữ này.

Tuy nhiên tôi đã tìm thấy điều này mà có thể là nguồn gốc cho UserManager dựa trên những biểu tượng debug:

UserManager Source Code

Tôi cũng thấy những bài viết mà có thể giúp:

Implementing custom password policy using ASP.NET Identity

UserManager Class Documentation

IUserTokenProvider Interface Documentation

+0

Biểu tượng gỡ lỗi cho tôi những gì tôi cần. Cảm ơn rất nhiều! EDIT: Nó bật ra "ResetPassword" là mục đích chính xác cho kịch bản này. –

8

Tôi đã vượt qua vấn đề của mình bằng cách đặt mục đích thành "ResetPassword".

Dưới đây là một đoạn của kết quả cuối cùng trong trường hợp ai đó muốn làm điều gì đó tương tự. Nó là một phương pháp trong lớp ApplicationUserManager của tôi. Mặc dù vậy, nhận ra rằng một số xử lý ngoại lệ mà Microsoft triển khai bị thiếu hoặc không được bản địa hóa vì các biến, phương thức và tài nguyên riêng lẻ được sử dụng trong mã của chúng không thể truy cập được. Thật không may họ đã không làm cho những thứ đó được bảo vệ để tôi có thể nhận được nó. Các cuộc gọi phương pháp ThrowIfDisposed thiếu cụ thể là thú vị (và chợ) với tôi. Rõ ràng họ đang dự đoán các cuộc gọi phương thức sau khi một cá thể đã được xử lý để cung cấp một thông báo lỗi thân thiện hơn và tránh những điều bất ngờ.

public async Task<IdentityResult> ResetPasswordAsync(IdentityUser user, 
    string token, string newPassword) 
{ 
    if (user == null) 
    { 
     throw new ArgumentNullException("user"); 
    } 

    // Make sure the token is valid and the stamp matches. 
    if (!await UserTokenProvider.ValidateAsync("ResetPassword", token, 
     this, user)) 
    { 
     return IdentityResult.Failed("Invalid token."); 
    } 

    // Make sure the new password is valid. 
    var result = await PasswordValidator.ValidateAsync(newPassword) 
     .ConfigureAwait(false); 
    if (!result.Succeeded) 
    { 
     return result; 
    } 

    // Update the password hash and invalidate the current security stamp. 
    user.PasswordHash = PasswordHasher.HashPassword(newPassword); 
    user.SecurityStamp = Guid.NewGuid().ToString(); 

    // Save the user and return the outcome. 
    return await UpdateAsync(user).ConfigureAwait(false); 
} 
+0

IMHO nó nên gọi 'SetSecurityStampAsync' và 'SetPasswordHashAsync' thay vì một' UpdateAsync' đầy đủ ... Không phải là điều câm đầu tiên họ làm trong mess này của ASP.NET Identity ... – Vincent

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