5 回答

TA貢獻1821條經驗 獲得超6個贊
此問題似乎是與基本查詢字符串相關的問題。您的問題中沒有關于樣本期望值和樣本實際值的指針。因此,我無法在這里為您提供確切的答案。但下面兩個是指針,它們肯定會解決這個問題。
可能存在兩個問題:
問題 1:在 HtmlDecode/UrlDecode 之后,原始 Base-64 無法恢復
這些令牌被編碼為 base 64 字符串,其中可能包含“+”等字符。
它們被發送到服務器。
然后服務器嘗試對此字符串執行 HtmlDecode 操作,以刪除原始 base 64 令牌中實際存在的字符。
例如,“+”被空字符串取代。
因此,在 WebUtility.HtmlDecode 之后生成的令牌無效。這就是您收到無效令牌錯誤的原因
How to check this ?
您可以進行調試,并查看 HtmlDecode 后面的值和預期值。如果它們不同,那么這就是根本原因。
問題 2:查詢字符串格式不正確
查詢字符串中的多個鍵值對使用“&”字符連接。例如,key1=value1&key2=value2
但有時,它的編碼版本不是在查詢字符串中出現的。
例如,key1=value1&key2=value2&
&
如果是這種情況,.Net 服務器將無法正確分析查詢字符串。
How to check this ?
您可以使用從 HttpContext 直接讀取原始查詢字符串,也可以使用 QueryString 屬性的 HttpRequest,并檢查是否屬于這種情況。如果是這樣,那么您可以更改客戶端以發送適當的查詢字符串(更具邏輯性和可維護性),或者編寫一些代碼以在服務器端進行更正。
這些指針應該可以幫助您解決問題。

TA貢獻1900條經驗 獲得超5個贊
您對電子郵件配置的請求將為您提供 userId 和您的私鑰的響應,但您的令牌方法應該是不同的函數,如令牌刷新,您需要添加一些條件,例如如果令牌已過期,則刷新令牌

TA貢獻1799條經驗 獲得超6個贊
如果編碼的代碼末尾包含“==”。即在urlencode或base64編碼之后,如果代碼像這樣出現“cm9vdA==”。
對此進行解碼不會為您提供確切的編碼字符串,并將導致無效代碼。
因此,在生成令牌時,請檢查編碼值是否以“==”結尾。如果它確實生成了另一個令牌,則問題將得到解決。

TA貢獻1946條經驗 獲得超3個贊
您不需要使用標識服務器來解決此問題。
當用戶注冊時,請在用戶表中添加兩列。一個用于驗證,另一個用于 IsVerified。在驗證令牌列中添加一個 Guid。然后使用此 Guid 生成鏈接。當用戶單擊此鏈接時,您將在控制器中獲取 Guid。然后使用此列獲取此用戶,然后將“已驗證”列設置為 true 并刪除 Guid 列。您的用戶現在已成功驗證。

TA貢獻1876條經驗 獲得超5個贊
在將確認代碼傳遞到方法中之前,應對其進行解碼。_userManager.ConfirmEmailAsync(user, code).ConfigureAwait(false)
您已經對您在 callBackUrl 中使用的確認代碼進行了 URL 編碼;您應該在嘗試使用它之前對其進行解碼。WebUtility.UrlDecode(code)
- 5 回答
- 0 關注
- 411 瀏覽
添加回答
舉報