2014-05-21 28 views
6

Làm cách nào để đặt lại mật khẩu làm quản trị viên cho người dùng khác?Identity 2.0 Đặt lại mật khẩu bằng cách quản trị

Tôi đã thử bằng cách sử dụng đoạn mã sau

var code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); 
var result = await UserManager.ResetPasswordAsync(user.Id, code, vm.NewPassword); 

khi bước qua GeneratePasswordResetTokenAsync, các phương pháp xử lý của bộ điều khiển được gọi.

Ai đó có thể vui lòng khai sáng cho tôi không?

+0

Phiên bản mvc nào? –

+0

mvc 5.1, đã cập nhật thẻ. cảm ơn –

Trả lời

-1

Tôi nên tìm kiếm thêm trước khi đăng câu hỏi tại đây.

Dường như tôi cần kết nối UserTokenProvider với một DataProtectorTokenProvider.

Tuy nhiên tôi không hiểu DataProtector là gì, sẽ rất vui nếu ai đó có thể giải thích tại đây.

var dataProtectionProvider = options.DataProtectionProvider; 
if (dataProtectionProvider != null) 
{ 
    manager.UserTokenProvider = new DataProtectorTokenProvider<MyUser>(dataProtectionProvider.Create("ASP.NET Identity")); 
} 

Câu trả lời được tìm thấy here

+0

'tùy chọn' đề cập đến điều gì? – Colum

+0

' PublicUserManager Tạo các tùy chọn (IdentityFactoryOptions , IOwinContext) { var manager = new ApplicationUserManager (new UserStore (context.Get ())); var dataProtectionProvider = options.DataProtectionProvider; nếu (dataProtectionProvider! = Null) { người quản lý.UserTokenProvider = new DataProtectorTokenProvider (dataProtectionProvider.Create ("ASP.NET Identity")); } người quản lý trả lại; } ' – DotNetGeek

7

Bạn cũng có thể mở rộng UserManager và phơi bày một API AdminChangePassword rõ ràng mà không yêu cầu bất kỳ thông tin. Một cái gì đó như thế này trong ApplicationUserManager mà mở rộng UserManager nên làm việc:

public IdentityResult ChangePasswordAdmin(string userId, string newPassword) { 
    var user = FindById(userId); 
    // validate password using PasswordValidator.Validate 
    user.PasswordHash = PasswordHasher.HashPassword(newPassword); 
    Update(user); 
} 
Các vấn đề liên quan