繁体   English   中英

实体框架的MVC(ASP.NET身份)自定义登录状态

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM