[英]MVC (ASP.NET Identity) custom Signin Status with Entity Framework
我有一个使用实体框架的现有数据库。 注册和登录有效,但是我想在“登录状态:未授权”中添加其他状态。
以下是登录代码:
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.UserName, model.Password, model.RememberMe, shouldLockout: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
'case SignInStatus.UnAuthorized:
return View("UnAuthorized");' //I want to add this
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);
}
}
我已经在上面的代码片段中添加了该部分,以向您展示我想要的东西。 我发现了上面使用的状态。 在下面的代码段中提供,但是我无法修改此文件:
namespace Microsoft.AspNet.Identity.Owin
{
//
// Summary:
// Possible results from a sign in attempt
public enum SignInStatus
{
//
// Summary:
// Sign in was successful
Success = 0,
//
// Summary:
// User is locked out
LockedOut = 1,
//
// Summary:
// Sign in requires addition verification (i.e. two factor)
RequiresVerification = 2,
//
// Summary:
// Sign in failed
Failure = 3
}
}
我可能会补充说,我是MVC的新手。
谁能指出我正确的方向,以便能够添加自定义登录状态? PS:我的数据库中确实存在一个“授权”字段,如果用户已被授权或不登录,我想在该字段中进行提取。
谢谢您的帮助。
所以我在Google上搜索了很多,似乎SignInManager的状态无法修改? 也许我错了,因为我对MVC和实体框架的了解非常有限。
因此,我找到了解决方法,并在运行实际的登录代码之前通过添加以下内容使用LinQ进行了自己的验证:
using (EFNameEntities db = new EFNameEntities())
{
var UserData = from ANU in db.AspNetUsers
where ANU.UserName == model.UserName
select new
{
ANU.isAuthorized,
ANU.isActive
};
foreach (var c in UserData)
{
//If User is NOT Authorized to log in
if (!Convert.ToBoolean(c.isAuthorized))
{
ModelState.AddModelError("", "This User is not Authorized to Login.");
return View(model);
}
else
{
//If User is NOT Active
if (!Convert.ToBoolean(c.isActive))
{
ModelState.AddModelError("", "This User is not Active.");
return View(model);
}
}
}
}
因此,整个Login ActionResult如下所示:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (!ModelState.IsValid)
{
return View(model);
}
using (EFNameEntities db = new EFNameEntities ())
{
var UserData = from ANU in db.AspNetUsers
where ANU.UserName == model.UserName
select new
{
ANU.isAuthorized,
ANU.isActive
};
foreach (var c in UserData)
{
//If User is NOT Authorized to log in
if (!Convert.ToBoolean(c.isAuthorized))
{
ModelState.AddModelError("", "This User is not Authorized to Login.");
return View(model);
}
else
{
//If User is NOT Active
if (!Convert.ToBoolean(c.isActive))
{
ModelState.AddModelError("", "This User is not Active.");
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.UserName, model.Password, model.RememberMe, shouldLockout: true);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
//case SignInStatus.UnAuthorized:
// return View("UnAuthorized");
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
case SignInStatus.Failure:
default:
//Incorrect password or user does not exist
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.