微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

asp.net – 什么设置的User.Identity.Name和User.Identity.IsAuthenticated?

我想知道什么是用户身份名称,并且更改isAuthenticated为true.

为什么在SignInManager.PasswordSignInAsync返回Success后,User.Identity.Name为空字符串且User.Identity.IsAuthenticated为false.

// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(Loginviewmodel model,string returnUrl)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    var userIdentityNameTest = User.Identity.Name; // Empty string

    var result = await SignInManager.PasswordSignInAsync(
                                             model.Email,model.Password,model.RememberMe,shouldLockout: false);
    // result is "Success"

    userIdentityNameTest = User.Identity.Name;
    // userIdentityNameTest is still an empty string?
    // User.Identity.IsAuthenticated is still false?

    switch (result)
    {
        case SignInStatus.Success:
            return RedirectToLocal(returnUrl);
        case SignInStatus.LockedOut:
            return View("Lockout");
        case SignInStatus.Requiresverification:
            return RedirectToAction("SendCode",new { ReturnUrl = returnUrl,RememberMe = model.RememberMe });
        case SignInStatus.Failure:
        default:
            ModelState.AddModelError("","Invalid login attempt.");
            return View(model);
    }
}

解决方法

似乎SignInManager.PasswordSignInAsync仅验证输入的数据,如果您没有使用TwoFactorAuthentication,则运行AuthenticationManager.SignIn.在这种情况下,AuthenticationManager.SignIn仅将身份验证cookie设置为响应.

因此,User.Identity可在随后的应用程序请求中使用.要按名称获取ApplicationUser,您可以使用ApplicationUserManager,如下所示:

UserManager.FindByNameAsync(model.Name)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐