2017-12-07 9 views
0

작동하지 I는 다음과 같습니다 이메일을 통해 토큰받을 사용자를 등록 : 내가 링크를 클릭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.Succeededtrue입니다.

모든 것이 잘 나타납니다,하지만 난 나에게 내 계정을 알려주는 페이지로 이동 얻을이 과정을 완료 한 후 로그인을 시도 할 때

가 잠김 잠겨 있습니다.

이 계정

이 잠겨있다, 나중에 다시 시도하십시오.

무슨 일을하고있을 couldI? db의 잠금 플래그를 수동으로 변경해야합니까? 그렇다면 ConfirmEmailAsync 방법의 요점은 무엇입니까?

답변

1

ConfirmEmailAsync은 참으로 사용자 계정의 기록에 EmailConfirmed을 설정합니다. UserManager에서 (간결성을 위해 편집) :

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

오류는 LockoutEnabled 지적 받고있어 :

public virtual async Task<IdentityResult> ConfirmEmailAsync(TUser user, string token) 
{ 
    ... 
    var store = GetEmailStore(); 
    ... 
    await store.SetEmailConfirmedAsync(user, true, CancellationToken); 
    return await UpdateUserAsync(user); 
} 

GetEmailStoresets the flag (기본적으로 UserStore에 의해 구현 됨) IUserEmailStore을 반환 경우 사용자 계정의 플래그가 참입니다. UserManager에서 SetLockoutEnabledAsync 메서드를 호출하여이 값을 false로 설정할 수 있습니다.

또한 창조에 기본적으로 계정 잠금을 해제 UserManagerSupportsUserLockout 플래그가있다. 이를 설정하려면 자신의 UserManager을 만들고이 플래그를 false로 대체해야합니다.

+0

'SetLockoutEnabledAsync (userId, false) '를 호출하면 감사합니다! – Bassie