Asp.net mvc 调用SingInManager并返回成功MVC5后,没有可用的用户数据
在成功登录后尝试访问用户数据时,我收到一个NullReferenceException。这里的查询是关于用户数据在登录过程中何时实际可用以进行查询。以下是我在帐户控制器的登录方法中输入的代码:Asp.net mvc 调用SingInManager并返回成功MVC5后,没有可用的用户数据,asp.net-mvc,asp.net-mvc-5,asp.net-identity,Asp.net Mvc,Asp.net Mvc 5,Asp.net Identity,在成功登录后尝试访问用户数据时,我收到一个NullReferenceException。这里的查询是关于用户数据在登录过程中何时实际可用以进行查询。以下是我在帐户控制器的登录方法中输入的代码: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
[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:
var sh = new SoapHelper();
var user = UserManager.FindById(User.Identity.GetUserId());
Session["UserExists"] = true;
Session["StartDate"] = DateTime.Now.ToString("yyyyMMdd");
Session["EndDate"] = DateTime.Now.ToString("yyyyMMdd");
Session["UserCompany"] = user.CompanyID;
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务登录(LoginView模型,字符串返回URL)
{
如果(!ModelState.IsValid)
{
返回视图(模型);
}
//这不会将登录失败计入帐户锁定
//要使密码失败触发帐户锁定,请更改为shouldLockout:true
var result=wait SignInManager.PasswordSignInAsync(model.Email、model.Password、model.RememberMe、shouldllockout:false);
开关(结果)
{
案例标志状态成功:
var sh=新的SoapHelper();
var user=UserManager.FindById(user.Identity.GetUserId());
会话[“UserExists”]=true;
会话[“StartDate”]=DateTime.Now.ToString(“yyyyMMdd”);
会话[“EndDate”]=DateTime.Now.ToString(“yyyyMMdd”);
会话[“UserCompany”]=user.CompanyID;
最后一行代码是抛出错误的地方,在登录过程中,我是否无法访问UserManager以从User表获取所需的数据
非常感谢您的帮助!您的意思是说用户对象是空的吗
var user = UserManager.FindById(User.Identity.GetUserId());
请在这里发布例外情况,以便我们提供更多有关此的详细信息
实体框架中的users表中是否还有CompanyId列?经过进一步的研究和测试,我发现不能在与SignInManager.PasswordSignInAsync相同的调用中使用User.Identity.Name的原因是该User.Identity填写了来自身份验证cookie的声明(尚未解析) 所以我打了第二个电话,等待用户经理
var user = await UserManager.FindAsync(model.Email, model.Password);
它工作起来很有魅力。System.NullReferenceException:Object reference未设置为对象的实例,并且没有公司ID最初不在他们给您的表中。我通过向ApplicationUser类添加属性对其进行了编辑,它在我的数据库中有值。是否成功返回了
user
tity.GetUserId()返回一个值?我能够解决我的问题,只是还不能接受我自己的答案,请参见下文。