UserManager VerifyUserTokenAsync始终为False

hey*_*ega 5 asp.net-mvc asp.net-identity asp.net-identity-2

我正在生成像这样的用法

public async Task GenerateCode()
{

    var code = await UserManager.GenerateUserTokenAsync("heymega", new Guid("16139fcd-7ae0-449c-ad1c-f568bbe46744"));


}
Run Code Online (Sandbox Code Playgroud)

然后,我通过单独的请求将相同的令牌传递给另一个操作

public async Task ValidateCode(string code)
{

    var valid = await UserManager.VerifyUserTokenAsync(new Guid("16139fcd-7ae0-449c-ad1c-f568bbe46744"), "heymega", code); //Returns False

}
Run Code Online (Sandbox Code Playgroud)

但是,该VerifyUserTokenAsync方法的响应始终为false.

如果我要生成代码并在同一操作中进行验证

public async Task GenerateCode()
{

    var code = await UserManager.GenerateUserTokenAsync("heymega", new Guid("16139fcd-7ae0-449c-ad1c-f568bbe46744"));

    var valid = await UserManager.VerifyUserTokenAsync(new Guid("16139fcd-7ae0-449c-ad1c-f568bbe46744"), "heymega", code); //Returns True

}
Run Code Online (Sandbox Code Playgroud)

它返回true.

为什么验证方法无法在单独的请求中验证代码?我错过了一些明显的东西吗

hey*_*ega 8

我终于把头发拉了几个小时后想出来了.你需要对代码进行URL编码,我决定使用HttpUtility类.

HttpUtility.UrlEncode(code);
Run Code Online (Sandbox Code Playgroud)

在验证代码时,您不需要对代码进行URL解码.

  • 我不确定您安装了哪个版本的 ASP.NET Identity。但是我使用的是 2.2.1 版,当我验证代码时,我绝对必须使用 HttpUtility.UrlDecode(code)。否则,它总是返回 false。 (3认同)