asp.net-mvc – 防止用户没有确认的电子邮件登录ASP.NET MVC与身份2

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 防止用户没有确认的电子邮件登录ASP.NET MVC与身份2前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在微软身份2中有能力确认用户可以确认有哪些电子邮件地址我下载的Identity 2样本项目从 here在这个项目中没有任何区别用户确认他们的电子邮件和谁不想让人怎么没有确认他们的电子邮件无法登录,这是我试过的:
public async Task<ActionResult> Login(Loginviewmodel model,string returnUrl)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }


        var result = await SignInManager.PasswordSignInAsync(model.Email,model.Password,model.RememberMe,shouldLockout: true);
        switch (result)
        {
            case SignInStatus.Success:
                {


                    var user = await UserManager.FindByNameAsync(model.Email);
                    if (user != null)
                    {
                        if (!await UserManager.IsEmailConfirmedAsync(user.Id))
                        {
                            //first I tried this.
                            //return logoff();
                            HttpContext.Server.TransferRequest("~/Account/logoff");
                            return RedirectToAction("Login");
                        }
                    }

                    return RedirectToLocal(returnUrl);
                }
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode",new { ReturnUrl = returnUrl });
            case SignInStatus.Failure:
            default:
                ModelState.AddModelError("","Invalid login attempt.");
                return View(model);

我试图通过调用logoff()操作方法强制用户注销,但是它没有起作用,用户仍然被认证.然后我尝试使用Server.TransferRequest(),但是我不知道为什么它做了这个工作,但是它重定向用户使用returnUrl =“Account / logoff”登录页面
所以在他们确认他们的电子邮件并尝试登录后,他们得到注销我真的很困惑!
这是我的logoff()动作方法

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult logoff()
    {
        AuthenticationManager.SignOut();
        return RedirectToAction("About","Home");
    }

我已经google了几天没有任何运气!!!!

解决方法

也许它有点迟了,但我希望它可以帮助别人.

加这个

var userid = UserManager.FindByEmail(model.Email).Id;
        if (!UserManager.IsEmailConfirmed(userid))
        {
            return View("EmailNotConfirmed");
        }

之前

var result = await SignInManager.PasswordSignInAsync(model.Email,shouldLockout: false);

第一个代码块只是检查模型中的电子邮件是否存在于数据库中,并获取其id来检查是否没有确认,如果是,则返回一个视图给用户,如果这样,如果确认只是让用户签名在.

并将此更改删除到结果开关

switch (result)
        {
            case SignInStatus.Success:
                    return RedirectToLocal(returnUrl);
            case SignInStatus.LockedOut:
                return View("Lockout");
            case SignInStatus.RequiresVerification:
                return RedirectToAction("SendCode","Invalid login attempt.");
                return View(model);
        }

猜你在找的asp.Net相关文章