2017-01-26 7 views
1

Я использую ASP.NET MVC Core с OpenIDDict. Я использую представления с аутентификацией cookie и JWT для OpenIDDict. Все работает отлично для следующего экрана:Подтверждение электронной почты зарегистрированного пользователя OpenIDDict

Идентификатор изменен, чтобы сначала отправить электронное письмо с подтверждением, чтобы подтвердить свой адрес электронной почты. Пользователь получает ссылку по электронной почте и нажимает на нее. Затем они заходят в систему. Просто. Тем временем они не могут получить доступ к каким-либо страницам.

Но я заметил, что, используя почтальон, они могут получить доступ к решению через APi'S через OpenIDDict. Они все еще получают разрешение. И когда они получают разрешение, они могут обращаться к API.

Только что написал это у меня было отказаться от мозга, и я мог бы просто ввести код в AuthenticationController во время обмена действия:

public async Task<IActionResult> Exchange(OpenIdConnectRequest request) 
    { 
     Debug.Assert(request.IsTokenRequest(), 
      "The OpenIddict binder for ASP.NET Core MVC is not registered. " + 
      "Make sure services.AddOpenIddict().AddMvcBinders() is correctly called."); 

     if (request.IsPasswordGrantType()) 
     { 
      var user = await _userManager.FindByNameAsync(request.Username); 
      //if (user == null) 
      if (user == null || !(await _userManager.IsEmailConfirmedAsync(user))) 
      { 

Works! Вот и пошли ... ответил на мой собственный вопрос. Mya поможет другим в будущем

ответ

0

Несмотря на то, что ваше решение работает, вы можете предпочесть настроить ASP.NET Core Identity, чтобы проверить «подтверждение по электронной почте» при вызове SignInManager.CanSignInAsync(user). Вы можете настроить это в параметрах Identity:

services.AddIdentity<ApplicationUser, IdentityRole>(options => { 
    options.SignIn.RequireConfirmedEmail = true; 
}); 
+0

Спасибо. Но это дополнение к AddIdentity - это то, что запускает его в первую очередь! Таким образом, ваше право, которое обеспечивает отправку подтверждения электронной почты пользователю. Изменения в моем сообщении - это то, как тогда обрабатывать его из OpenIdDict, так как это также необходимо проверить. Кроме того, для полноты, проверка электронной почты должна быть опубликована во внешних проверках поставщиков, поскольку социальные сети не нуждаются в этом – Bhail

+0

Вы пропустили мою точку зрения: использование 'IsEmailConfirmedAsync' в вашем собственном коде не обязательно, как это сделано для вас 'CanSignInAsync', когда включена опция' RequireEmailConfirmation'. – Pinpoint

+0

@Bhail https://github.com/openiddict/openiddict-samples/blob/master/samples/PasswordFlow/AuthorizationServer/Controllers/AuthorizationController.cs#L52 – Pinpoint