Asp.net-Mvc

UserManager VerifyUserTokenAsync 總是 False

  • January 11, 2022

我正在像這樣生成一個使用者令牌

public async Task GenerateCode()
{

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


}

然後我通過單獨的請求將相同的令牌傳遞給另一個動作

public async Task ValidateCode(string code)
{

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

}

但是,該VerifyUserTokenAsync方法的響應總是錯誤的。

如果我要生成程式碼並在同一操作中進行驗證

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

}

它返回真。

為什麼驗證方法不能在單獨的請求中驗證程式碼?我錯過了一些明顯的東西嗎?

在把頭髮拉了幾個小時後,我終於想到了這一點。您需要對程式碼進行 URL 編碼,我決定為此使用 HttpUtility 類。

HttpUtility.UrlEncode(code);

在驗證程式碼時,您不需要對程式碼進行 URL 解碼。

剛剛在這個問題上燒了 2 天,這可能是您發生這種情況的另一個原因。

在您的 Startup.cs - ConfigureServices(IServiceCollection services) 方法中,確保:

services.AddAuthentication

出現在之前

services.AddIdentity

否則對 VerifyUserTokenAsync 的呼叫將始終返回 false

引用自:https://stackoverflow.com/questions/29942119