【发布时间】:2015-06-16 09:47:55
【问题描述】:
我的 UserStore 类中的 SetEmailConfirmedAsync 方法存在问题。
一切正常,正在使用散列密码创建用户,正在为确认电子邮件生成令牌,电子邮件正在成功发送。当我尝试验证电子邮件时出现问题
public async Task<ActionResult> ConfirmEmail(Guid userId, string token)
{
Task<Microsoft.AspNet.Identity.IdentityResult> result = UserManager.ConfirmEmailAsync(userId, token);
if (result.Result.Succeeded)
{
}
else
{
}
return View();
}
然后调用
public Task SetEmailConfirmedAsync(User user, bool confirmed)
{
AccountService.VerifiyAccount(user.Id, confirmed);
return Task.FromResult(0);
}
按照我的预期将帐户设置为已验证。但是,接下来发生的事情是调用 FindByNameAsync,然后调用 UpdateAsync 方法,该方法覆盖了我在 SetEmailConfirmedAsync 中应用的更改。
有谁知道为什么 asp.net Identity 在 SetEmailConfirmedAsync 之后调用 UpdateAsync?我四处寻找一些线索,但找不到任何东西。
更新
我已经进行了一些挖掘并从身份源代码中提取了这个
public virtual async Task<IdentityResult> ConfirmEmailAsync(TKey userId, string token)
{
ThrowIfDisposed();
var store = GetEmailStore();
var user = await FindByIdAsync(userId).WithCurrentCulture();
if (user == null)
{
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound,
userId));
}
if (!await VerifyUserTokenAsync(userId, "Confirmation", token).WithCurrentCulture())
{
return IdentityResult.Failed(Resources.InvalidToken);
}
await store.SetEmailConfirmedAsync(user, true).WithCurrentCulture();
return await UpdateAsync(user).WithCurrentCulture();
}
我正在努力弄清楚为什么在调用 SetEmailConfirmedAsync 之后会调用更新用户
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-identity