Asp.net mvc 为什么用户为空
我想问一下,为什么用户登录后UserId为null(在下面的代码中) 或 我需要根据用户的角色重定向用户。我需要让它尽可能简单Asp.net mvc 为什么用户为空,asp.net-mvc,login-script,Asp.net Mvc,Login Script,我想问一下,为什么用户登录后UserId为null(在下面的代码中) 或 我需要根据用户的角色重定向用户。我需要让它尽可能简单 // POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) {
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, change to shouldLockout: true
var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
string UserId = User.Identity.GetUserId(); <------ HERE
HelpRoles hr = new HelpRoles();
returnUrl = hr.CheckUserRoleAndRedirect(UserId);
return RedirectToLocal(returnUrl);
//POST:/Account/Login
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginView模型,字符串返回URL)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
//这不会将登录失败计入帐户锁定
//要使密码失败触发帐户锁定,请更改为shouldLockout:true
var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false);
开关(结果)
{
案例标志状态成功:
string UserId=User.Identity.GetUserId();用户对象是在请求经过身份验证后根据解密的cookie设置的,并且这些cookie直到下一个请求时才设置,因此需要在用户之前刷新页面。Identity不为null
欲了解更多信息
要解决此问题,在成功案例中,您可以使用电子邮件地址从数据库中获取用户,并在其上使用ID。用户对象是在请求经过身份验证后根据解密的cookies设置的,并且这些cookies在下一个请求之前不会设置,因此需要在用户之前刷新页面。标识不可用嗯
欲了解更多信息
要解决此问题,在成功案例中,您可以使用电子邮件地址从数据库中获取用户,并在其上使用ID。正如John Mc所说,要解决此问题,您必须在成功案例中获取用户。因此,在获取用户ID
var user = userManager.Find(model.UserName, model.Password);
或
或
编辑
在这种情况下,您不必使用如下所示的方法
string UserId=User.Identity.GetUserId();
正如John Mc所说,要解决这个问题,您必须在成功案例中获得用户。因此,在获得UserId之前,您可能需要这样的内容
var user = userManager.Find(model.UserName, model.Password);
或
或
编辑
在这种情况下,您不必使用如下所示的方法
string UserId=User.Identity.GetUserId();
var user = userManager.FindByName(model.Username);