【问题标题】:Checking Identity Email token validity检查身份电子邮件令牌的有效性
【发布时间】:2018-08-02 10:26:28
【问题描述】:

我有一个 .net 核心应用程序,我在其中注册后制作一个电子邮件令牌,然后通过电子邮件发送它。 这个想法是,用户可以在客户端应用程序中使用该电子邮件令牌,我想检查它的有效性(如果它过期,它是否是与给定电子邮件关联的正确令牌)。

我试图在 userManager 中找到我可以使用的任何方法。我找到的是VerifyUserTokenAsync(ApplicationUser user, string tokenProvider, string purpose, string token),但我不知道要传递什么参数。

那么,任何人都可以帮助tokenProviderpurpose 我想提一下,电子邮件令牌是使用GenerateEmailConfirmationTokenAsync 生成的。我可以用ConfirmEmailAsync检查令牌,如果结果不成功,则令牌无效,但如果令牌有效,我不想将EmailConfirmed设置为true。

【问题讨论】:

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


    【解决方案1】:

    解决此问题的一个有用方法是查看implementationConfirmEmailAsync

    public virtual async Task<IdentityResult> ConfirmEmailAsync(TUser user, string token)
    {
        // ...
        if (!await VerifyUserTokenAsync(user, Options.Tokens.EmailConfirmationTokenProvider, ConfirmEmailTokenPurpose, token))
        {
            return IdentityResult.Failed(ErrorDescriber.InvalidToken());
        }
        // ...
    }
    

    正如所料,ConfirmEmailAsync 调用了VerifyUserTokenAsync。传递给此方法的第二个和第三个参数(tokenProviderpurpose)是使用 UserManager 类本身的属性提供的。再看源码,很明显OptionsConfirmEmailTokenPurpose都是public的:

    public const string ConfirmEmailTokenPurpose = "EmailConfirmation";
    // ...    
    public IdentityOptions Options { get; set; }
    

    鉴于所有这些,您可以像这样致电VerifyUserTokenAsync

    await userManager.VerifyUserTokenAsync(
        userYouAlreadyHave,
        userManager.Options.Tokens.EmailConfirmationTokenProvider,
        userManager.ConfirmEmailTokenPurpose,
        tokenYouAlreadyHave);
    

    如果此调用返回true,则令牌有效。

    【讨论】:

      猜你喜欢
      • 2015-12-13
      • 2018-03-19
      • 2015-02-16
      • 2015-04-08
      • 2015-08-17
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      相关资源
      最近更新 更多