我正在尝试从我的API发送确认电子邮件。邮件发送没有问题。
当我从MVC5加载网址时,出现此错误:
我试过了:
Asp.NET Identity 2 giving "Invalid Token" error
http://www.gunaatita.com/Blog/Invalid-Token-Error-on-Email-Confirmation-in-Aspnet-Identity/1056 - >我的api和我的MVC是在两台服务器上托管的两个项目,因此我尝试使用machineKey validationKey。
我使用的代码如下:
Web API
if (!await db.Users.AnyAsync(c => c.Email == userRequest.Email)) return StatusCode(HttpStatusCode.NotFound);
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(userContext));
userManager.UserTokenProvider = new TotpSecurityStampBasedTokenProvider<ApplicationUser, string>();
var user = await userManager.FindByNameAsync(userRequest.Email);
var userId = user.Id;
var code = await userManager.GenerateEmailConfirmationTokenAsync(user.Id);
var url = "MyUrl" + "/Account/ConfirmEmail?userId=" + userId + "&code=" + code;
MVC5
if (userId == null || code == null)
{
return View("Error");
}
var result = await UserManager.ConfirmEmailAsync(userId, code);
return View(result.Succeeded ? "ConfirmEmail" : "Error");
答案 0 :(得分:0)
要使令牌确认生效,需要在“用户”表AspNetUsers
中保存令牌。
Web API
string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
user.ConfirmationToken = code;
UserManager.Update(user);
<强> MVC5 强>
var result = await UserManager.ConfirmEmailAsync(userId, code);
switch (result.Succeeded)
{
case true:
// Your code
case false:
//
default:
//
}
答案 1 :(得分:-1)
我认为它会抛出'invalid token',因为code参数对于querystring来说过于复杂(包含特殊字符)。所以它没有正确地重定向到页面。要解决这个问题:
string val = HttpServerUtility.UrlTokenEncode(Encoding.ASCII.GetBytes(code));
您可以使用此更改为“code”参数。