2015-10-04 99 views
3

鑑於我的代碼在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

+1

我同意你的意見。如果用戶沒有找到,那麼我們需要捕捉異常並自己處理,因爲框架沒有。 – forwheeler

回答

2

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