14

请参阅下面的代码:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
    case SignInStatus.Success:
        string UserId = User.Identity.GetUserId(); 
        return RedirectToAction("ClientDetails","Home");
    case SignInStatus.LockedOut:
        return View("Lockout");
    case SignInStatus.RequiresVerification:
        return RedirectToAction("SendCode", "Account", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
    case SignInStatus.Failure:
    default:
        ModelState.AddModelError("", "Invalid login attempt.");
        return View(model);
}

UserId总是nullUser.Identity.IsAuthenticated总是false。_ 但我可以查看ClientDetails需要身份验证的视图。

4

3 回答 3

17

我假设您的示例是您的 AccountController.Login() 方法中的代码。我和你有同样的问题,但发现直到下一个请求才会填充 User 对象。试试这个方法:

case SignInStatus.Success:
    return RedirectToAction("DoWork", "Account");


public async Task<ActionResult> DoWork()
{
    //this works
    string UserId = User.Identity.GetUserId();
    //return to View or Redirect again
}
于 2015-01-28T21:54:39.647 回答
13

对于问题的“The UserId 始终为 null”部分,您可以通过 model.UserName 查找用户:

var result = await SignInManager.PasswordSignInAsync(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
    case SignInStatus.Success:
        ApplicationUser user = UserManager.FindByName(model.UserName);
        string UserId = user.Id;
        // UserId is now populated
        return RedirectToAction("ClientDetails","Home");

等等。不确定您是否想要 User.Identity.IsAuthenticated true 或者这是否是一个观察结果——这不会改变那部分。

于 2015-07-14T23:28:02.990 回答
0

在使用 [Authorize] 属性标记方法并在授权标头中发送访问令牌后与我合作,似乎需要访问令牌来识别用户

于 2017-08-15T18:43:50.883 回答