我正在尝试确认帐户,但我收到"无效令牌".错误.
这是我正在尝试的:
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));
如果我UserManager.ConfirmEmailAsync
在此代码后拨打电话,我可以确认该帐户.但是,如果我打开它在变量callbackUrl中的链接并尝试通过该操作确认,我收到错误.
我认为它可能是OwinContext的东西,所以我决定打电话HttpContext.GetOwinContext().GetUserManager
但是我得到了同样的错误.
有线索吗?
我遇到了同样的问题.我用以下代码解决了这个问题.
样品:
var emailToken = _customManager.GenerateEmailConfirmationToken(userId); emailToken = emailToken.Base64ForUrlEncode();
扩展方法=>名称空间: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); } }
很可能是传输中的代码被浏览器修改.尝试在令牌上执行UrlEncode:
var code = await userManager.GenerateEmailConfirmationTokenAsync(userId); code = System.Web.HttpUtility.UrlEncode(code);
否则,浏览器会混淆令牌中可能出现的特殊符号.