在用户确认电子邮件链接之前,如何限制访问权限

时间:2015-04-09 17:34:34

标签: asp.net-mvc asp.net-mvc-5

我终于可以在我的MVC 5应用程序上发送电子邮件确认

用户现在收到一封电子邮件,并且EmailConfirmed字段从False更新为True。但是,用户仍然可以在不确认电子邮件的情况下登录。

我的问题是如何在用户确认电子邮件链接

之前限制访问权限

以下是我的ConfirmEmail方法。

    // GET: /Account/ConfirmEmail
    [AllowAnonymous]
    public async Task<ActionResult> ConfirmEmail(string Token, string Email)
    {
        ApplicationUser user = this.UserManager.FindById(Token);
        if (user != null)
        {
            if (user.Email == Email)
            {
                user.EmailConfirmed = true;
                await UserManager.UpdateAsync(user);
                //await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home", new { ConfirmedEmail = user.Email });
            }
            else
            {
                return RedirectToAction("Confirm", "Account", new { Email = user.Email });
            }
        }
        else
        {
            return RedirectToAction("Confirm", "Account", new { Email = "" });
        }
    }

    [AllowAnonymous]
    public ActionResult Confirm(string Email)
    {
        ViewBag.Email = Email; return View();
    } 

感谢大家的阅读。

塞西

-----更新------

我将以下代码添加到/ Account / Login Controller

    var user = await UserManager.FindByNameAsync(model.UserName);
    if(user != null){
        if (!await UserManager.IsEmailConfirmedAsync(user.UserName)) {
            return View("ErrorNotConfirmed");
        }
    }

但是它返回了一个错误。 UserId未找到。

1 个答案:

答案 0 :(得分:0)

我发布此代码以防有人需要它。

基本上我用以下代码替换了上面的代码:

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

它现在很漂亮。