微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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);
        }

原文地址:https://www.jb51.cc/aspnet/246392.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐