Tôi đang sử dụng danh tính ASP.NET với số ClaimsIdentity
để xác thực người dùng của mình. Khi người dùng được xác thực, thuộc tính User.Identity
chứa một phiên bản ClaimsIdentity
.ASP.NET Identity không được đặt trong yêu cầu đăng nhập
Tuy nhiên, đây không phải là trường hợp trong thời gian yêu cầu đăng nhập:
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, false, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
var identity = User.Identity;
------------> // identity is of type WindowsIdentity <------------
return RedirectToLocal(returnUrl);
Như bạn có thể thấy, mặc dù đăng nhập thành công, tài sản User.Identity
chưa được thiết lập để ClaimsIdentity
dụ. Tôi nghĩ điều này là hợp lý, có nghĩa là SignInManager
không cập nhật thuộc tính, vì vậy chúng tôi phải đợi cho đến khi yêu cầu tiếp theo để xem kết quả của thông tin đăng nhập.
Tuy nhiên, tôi phải làm luận bổ sung sau khi các phương pháp PasswordSignInAsync
, vì vậy tôi cần một cách để có được những ví dụ ClaimsIdentity
trong .success chi nhánh của câu lệnh switch.
Trong khi kiểm tra việc SignInManager
trong trình gỡ lỗi, tôi thấy rằng nó là loại Microsoft.Owin.Security.AuthenticationManager
, trong đó có tài sản SignInEntry.Item1
chứa ClaimsIdentity
tôi đang tìm kiếm.
Tuy nhiên, loại Microsoft.Owin.Security.AuthenticationManager
không được công khai, do đó, cách duy nhất có vẻ là hack bằng cách sử dụng phản chiếu.
Có cách nào tốt hơn không?
Sử dụng 'RedirectToAction' và nhận dạng danh tính trong hành động đó? Thay vì trả lại URL, hãy trả về tên của chế độ xem bạn muốn chuyển hướng đến. –
Đó là cách giải quyết mà tôi đang sử dụng tại thời điểm này. Nhưng không phải là có thể nhận được 'ClaimsIdentity' trong hành động Đăng nhập? – cheeesus
[Dường như không.] (Http://stackoverflow.com/a/26739821/3846058) –