当前位置: 首页 > 知识库问答 >
问题:

无法访问用户。身份MVC 5中AccountController的登录操作中的GetUserId()

康文昌
2023-03-14

当前环境Visual Studio 2015,MVC5,sp.net身份2.0,实体框架6.0

我试图获得用户。身份GetUserId()在用户刚刚通过身份验证,但在浏览器中获得“对象引用未设置为对象的实例”之后。

如果可能的话,我想使用。身份GetUserID()位于同一位置。我徘徊在哪里,起点是我可以访问用户。身份项目中的GetUserId()。

    //
    // 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);
        string userID = User.Identity.GetUserId().ToString();
        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);
        }
    }

“/”应用程序中的服务器错误。对象引用未设置为对象的实例。描述:在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。

异常详细信息:系统。NullReistrceException:对象引用未设置为对象的实例。

源错误:

第78行://要使密码失败触发帐户锁定,请更改为shouldLockout:true第79行:var result=wait SignInManager。PasswordSignInAsync(model.Email,model.Password,model.RememberMe,shouldLockout:false);第80行:字符串userID=User。身份GetUserId()。ToString();第81行:切换(结果)第82行:{

共有2个答案

长孙正卿
2023-03-14

请尝试使用当前代码

System.Web.HttpContext.Current.User.Identity.GetUserId();
冯枫
2023-03-14

您无法在登录后立即获取当前用户id,必须至少从用户发出一个新请求才能使登录生效。因此,如果您想在调用SignIn方法后立即获得登录的用户id,则必须使用user manager来获取id,而不是使用user。身份GetUserId()方法。

var user = await UserManager.FindByNameAsync(model.Email);
var userId = user.Id;
 类似资料:
  • 我们在MVC 5中有一个Web应用程序。它使用OWIN进行身份验证。现在我们有这样的情况,请求可能来自特定的服务器,该服务器在超文本传输协议头部发送用户名(以及一些密码信息来证明它是正确的服务器)。 在上述情况下,应用应该使用头字段中的给定名称向用户(身份)进行身份验证,而不必写入任何cookie或执行其他身份验证操作。我已经搜索了网络,在我看来,我必须在FilterConfig中添加一个自定义的

  • 本文向大家介绍在Django中限制已登录用户的访问的方法,包括了在Django中限制已登录用户的访问的方法的使用技巧和注意事项,需要的朋友参考一下 有很多原因需要控制用户访问站点的某部分。 一个简单原始的限制方法是检查 request.user.is_authenticated() ,然后重定向到登陆页面: 或者显示一个出错信息: 作为一个快捷方式, 你可以使用便捷的 login_required

  • 该应用程序应该接受用户电子邮件和密码,并使用Firebase身份验证作为后端。我使用像素2作为模拟器。每次应用程序处理登录功能时,它都会崩溃。 下面是Java文件和gradle文件 Java文件:

  • 如何在iOS8中使用CloudKit实现Sign sign-on? 我知道你可以得到一个代表你的登录用户的字符串,这是你的应用程序唯一的,但是我如何在我的后端验证那个字符串呢? 我明白Apple ID/iCloud电子邮件地址是出于隐私原因而隐藏的。 我的后端是Azure中的ASP.NET Web API2,但如果更简单的话,我可以用另一种技术实现它。 我正在寻找相当于谷歌在Android上的单点

  • 问题内容: 使用此命令 我尝试登录: 错误是: 我以root用户身份执行此操作,并且确实尝试刷新特权。 我尝试了无数用户,但这似乎行不通。我可以创建没有密码的用户,并且登录有效。命令行和从phpmyadmin 还要检查用户是否在mysql.user中。 布赖恩表演的表演赠款: 问题答案: 您可能会遇到这种永久性的MySQL问题,其中user表中的默认用户之一是,这最终会在表的后面拒绝所有用户。我会

  • 问题内容: 因此,我目前正在运行已安装ldapjs的node.js。 我的目标是拥有一个使用ldapjs的系统,以允许用户使用用户名和密码登录。 我已经阅读了一段时间的http://ldapjs.org文档,但是正在努力理解ldap的整个思想以及ldapjs的实现。 我目前在文档中有这个 这使我可以运行以下内容并成功绑定到服务器。 但是我真的不确定从这里走到哪里,即使这是正确的方法… 理想的设置是