为什么UserManager.ConfirmEmailAsync引发无效用户?
问题描述:
鉴于我的代码在ConfirmEmail
:为什么UserManager.ConfirmEmailAsync引发无效用户?
var result = await UserManager.ConfirmEmailAsync(userId, code);
if (result.Succeeded)
{
model.Message = "Thank you for confirming your email.";
model.IsConfirmed = true;
return View(model);
}
从标准的MVC 5项目模板的代码紧密依托,我希望一个无效的用户造成result.Succeeded == false
,不要有ConfirmEmailAsync
抛出InvalidOperationException
。
答
的UserManager.ConfirmEmailAsync
的源代码是:
public virtual async Task<IdentityResult> ConfirmEmailAsync(TKey userId, string token)
{
ThrowIfDisposed();
var store = GetEmailStore();
var user = await FindByIdAsync(userId).ConfigureAwait(false);
if (user == null)
{
throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, Resources.UserIdNotFound, userId));
}
if (!await VerifyUserTokenAsync(userId, "Confirmation", token))
{
return IdentityResult.Failed(Resources.InvalidToken);
}
await store.SetEmailConfirmedAsync(user, true).ConfigureAwait(false);
return await UpdateAsync(user).ConfigureAwait(false);
}
你可以看到,当使用FindByIdAsync(userId)
未找到用户InvalidOperationException
被抛出。
所以这种行为是有意设计的。
+2
不错 - OP可以总是覆盖这个方法来获得他想要的功能。 – heymega
我同意你的意见。如果用户没有找到,那么我们需要捕捉异常并自己处理,因为框架没有。 – forwheeler