【问题标题】:Aspnet Core 1.0 Identity User Manager ConfirmEmailAsync returns InvalidTokenAspnet Core 1.0 身份用户管理器 ConfirmEmailAsync 返回 InvalidToken
【发布时间】:2016-12-18 12:07:46
【问题描述】:

当用户单击他们收到的电子邮件中的 Confirm Email 链接时,该 url 会将用户定向到 Account Controller 中的 ConfirmEmailAsync 方法。 然后,此方法将调用结果返回给电子邮件令牌提供程序。

 var result = await _userManager.ConfirmEmailAsync(user, code);

我已经捕获了用户注册时生成的电子邮件令牌和上面代码变量中传递的令牌,它们是相同的。

我尝试过 Base64 编码和解码,但没有成功,尽管我相信这是由 asp-net-core-identity-token-providers 自动完成的。

有什么想法吗?

【问题讨论】:

    标签: asp.net-core asp.net-identity


    【解决方案1】:

    通过身份生成的令牌与用户的 SecurityStamp 相关联。如果出于任何原因更新了标记,则所有先前发送的令牌都将失效。更改或设置密码会导致这种情况发生。

    这可能是操作顺序问题。您发送电子邮件后是否偶然保存了注册密码以验证他们提供的电子邮件?

    例如,这将失败:

    • 使用令牌发送电子邮件
    • 保存密码等注册信息
    • 尝试使用令牌。

    相反,这应该有效:

    • 保存注册信息
    • 使用令牌发送电子邮件
    • 尝试使用令牌

    那个场景只是一个例子,因为我不能确定你的代码是这样设置的。也就是说,如果令牌相同,则问题可能是安全标记。在整个过程中,在您的数据库中密切关注它,看看是否有东西在更新它。

    【讨论】:

    • 在注册期间,我将用户保存到数据库。如果成功,则创建电子邮件和电子邮件令牌。然后发送电子邮件。不会对用户执行任何其他操作。
    • 事实上你是 100% 正确的。我在发送电子邮件后将用户添加到角色中,这正在更改安全标记。我纠正了这一点,现在一切都按预期工作。非常感谢!!
    • @Greg 很高兴为您提供帮助。 :)
    猜你喜欢
    • 2021-04-19
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2018-05-08
    • 1970-01-01
    相关资源
    最近更新 更多