加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 19:40:38 所属栏目:asp.Net 来源:网络整理
导读:在微软身份2中有能力确认用户可以确认有哪些电子邮件地址我下载的Identity 2样本项目从 here在这个项目中没有任何区别用户确认他们的电子邮件和谁不想让人怎么没有确认他们的电子邮件无法登录,这是我试过的: public async TaskActionResult Login(LoginView
在微软身份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);
        }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读