Thi*_*dio 15 asp.net-mvc-5 asp.net-identity asp.net-identity-2
我正在尝试确认帐户,但我收到"无效令牌".错误.
这是我正在尝试的:
var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmacaoEmail", "Usuario", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Ativação de Conta", user.GetEmailAtivacao(model.Nome, callbackUrl));
Run Code Online (Sandbox Code Playgroud)
如果我UserManager.ConfirmEmailAsync在此代码后拨打电话,我可以确认该帐户.但是,如果我打开它在变量callbackUrl中的链接并尝试通过该操作确认,我收到错误.
我认为它可能是OwinContext的东西,所以我决定打电话HttpContext.GetOwinContext().GetUserManager<MyCustomUserService>但是我得到了同样的错误.
有线索吗?
tra*_*max 24
很可能是传输中的代码被浏览器修改.尝试在令牌上执行UrlEncode:
var code = await userManager.GenerateEmailConfirmationTokenAsync(userId);
code = System.Web.HttpUtility.UrlEncode(code);
Run Code Online (Sandbox Code Playgroud)
否则,浏览器会混淆令牌中可能出现的特殊符号.
小智 22
我遇到了同样的问题.我用以下代码解决了这个问题.
样品:
var emailToken = _customManager.GenerateEmailConfirmationToken(userId);
emailToken = emailToken.Base64ForUrlEncode();
Run Code Online (Sandbox Code Playgroud)
扩展方法=>名称空间:System.Text,System.Web
public static class UrlEncoding
{
public static string Base64ForUrlEncode(this string str)
{
byte[] encbuff = Encoding.UTF8.GetBytes(str);
return HttpServerUtility.UrlTokenEncode(encbuff);
}
public static string Base64ForUrlDecode(this string str)
{
byte[] decbuff = HttpServerUtility.UrlTokenDecode(str);
return Encoding.UTF8.GetString(decbuff);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8399 次 |
| 最近记录: |