【问题标题】:Email Confirm in MVC 5MVC 5 中的电子邮件确认
【发布时间】:2018-07-31 21:05:21
【问题描述】:

我正在尝试从我的 API 发送确认电子邮件。邮件发送没有问题。

当我从 MVC5 加载 url 时,出现以下错误:

我试过了:

Asp.NET Identity 2 giving "Invalid Token" error

http://www.gunaatita.com/Blog/Invalid-Token-Error-on-Email-Confirmation-in-Aspnet-Identity/1056 --> 我的 api 和我的 MVC 是托管在两台服务器上的两个项目,因此我尝试使用 machineKey 验证密钥。

我使用的代码如下:

网络 API

        if (!await db.Users.AnyAsync(c => c.Email == userRequest.Email)) return StatusCode(HttpStatusCode.NotFound);

        var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(userContext));
        userManager.UserTokenProvider = new TotpSecurityStampBasedTokenProvider<ApplicationUser, string>();

        var user = await userManager.FindByNameAsync(userRequest.Email);

        var userId = user.Id;
        var code = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);

        var url = "MyUrl" + "/Account/ConfirmEmail?userId=" + userId + "&code=" + code;

MVC5

        if (userId == null || code == null)
        {
            return View("Error");
        }

        var result = await UserManager.ConfirmEmailAsync(userId, code);
        return View(result.Succeeded ? "ConfirmEmail" : "Error");

【问题讨论】:

  • code 不起作用时的值是多少?
  • API和mvc指向同一个数据源进行用户管理?
  • @mjwills 喜欢这个 userId=e6710368-9dd2-4417-9096-68642b80314f&code=843473
  • @ChetanRanpariya,是的,它们都指向同一个数据库
  • 你在mvc中得到预期的code和userId了吗?

标签: c# .net asp.net-mvc asp.net-mvc-5 asp.net-web-api2


【解决方案1】:

要使令牌确认起作用,令牌需要保存在用户表AspNetUsers中。

网络 API

string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
user.ConfirmationToken = code;
UserManager.Update(user);

MVC5

var result = await UserManager.ConfirmEmailAsync(userId, code);         
switch (result.Succeeded)
{
    case true:
    // Your code
    case false:
    //
    default:
    //
}

【讨论】:

    【解决方案2】:

    我认为它会抛出“无效令牌”,因为代码参数对于查询字符串来说太复杂(包含特殊字符)。所以它没有正确重定向到页面。解决这个问题:

    string val = HttpServerUtility.UrlTokenEncode(Encoding.ASCII.GetBytes(code));
    

    您可以使用此更改为“代码”参数。

    【讨论】:

    • 我尝试复制您的代码并粘贴...我遇到了同样的问题。
    • 我不确定这个解决方案,但您是否尝试设置网站的机器密钥?所有服务器上的机器密钥都相同吗?您可以使用 web.config 或 IIS 设置它们
    猜你喜欢
    • 2016-08-06
    • 2014-06-30
    • 2022-07-29
    • 2013-09-19
    • 2011-09-19
    • 2016-08-10
    • 2014-09-16
    • 2013-10-18
    • 1970-01-01
    相关资源
    最近更新 更多