2017-12-07 26 views
0

を働いていない私はこのようになります電子メールを介してトークン受信、ユーザーを登録します。私は、リンクをクリックしASP MVC ConfirmEmailAsync

Please confirm your account by clicking <a href="http://localhost:11080/Account/ConfirmEmail?userId=51d95921-c240-4025-ac38-7dfc08a1012f&code=Jc58CjzNK6mkeaFT0U7iO68aKP4OrQtYWY9AWCkJtWpnc948kiR%2Bxq9PnptItf1kpKjgi0OyZdguBwCvePOQ%2Bf5P3IPTZwdVA%2FEJ%2F6A9iscTKjDcR2Q9bJH%2FH76S5h1W0lsSSLxfad2Bjrr4H%2BySgP70uktmZIUkhQXnIJN1%2BqBuJ9EfWeuytOfbv1i%2FkNtV">here</a>

をし、私が見ることができるAccountController火災でConfirmEmail方法:

[AllowAnonymous] 
    public async Task<ActionResult> ConfirmEmail(string userId, string code) 
    { 
     if (userId == null || code == null) 
     { 
      return View("Error"); 
     } 
     var result = await UserManager.ConfirmEmailAsync(userId, code); 
     return View(result.Succeeded ? "ConfirmEmail" : "Error"); 
    } 

そして、result.Succeededは、trueです。

すべてが正常表示されますが、このプロセスを完了した後にログインしようとしたとき、私は自分のアカウントが

アウトロックをロックされている私に告げるページに移動します。

このアカウントはロックアウトされています。後でもう一度お試しください。

どうしたらいいですか? dbのロックアウトフラグを手動で変更する必要がありますか?もしそうなら、ConfirmEmailAsyncメソッドのポイントは何ですか?

答えて

1

ConfirmEmailAsyncは、ユーザーアカウントレコードのEmailConfirmedをtrueに設定するだけです。 UserManagerから(簡潔にするために編集):

GetEmailStoreIUserEmailStoreを返します(デフォルトでは UserStoreで実装されている)、 sets the flag
public virtual async Task<IdentityResult> ConfirmEmailAsync(TUser user, string token) 
{ 
    ... 
    var store = GetEmailStore(); 
    ... 
    await store.SetEmailConfirmedAsync(user, true, CancellationToken); 
    return await UpdateUserAsync(user); 
} 

:あなたはLockoutEnabledことが示されたばかりだエラー

public virtual Task SetEmailConfirmedAsync(TUser user, bool confirmed, CancellationToken cancellationToken = default(CancellationToken)) 
{ 
    ... 
    user.EmailConfirmed = confirmed; 
    return Task.CompletedTask; 
} 

ユーザーアカウントのフラグが真です。これをのSetLockoutEnabledAsyncメソッドを呼び出すことでfalseに設定できます。

UserManagerには、デフォルトで作成時にアカウントのロックを解除するフラグSupportsUserLockoutもあります。これを設定するには、独自のUserManagerを作成し、このフラグをfalseに変更する必要があります。

+0

'SetLockoutEnabledAsync(userId、false)'を呼び出しました、ありがとう! – Bassie