2017-01-26 3 views
1

Ich benutze ASP.NET MVC Core mit OpenIDDict. Ich verwende Ansichten mit Cookie-Authentifizierung und JWT für das OpenIDDict. Alles funktioniert für die folgenden scenerio perfekt sparen:OpenIDDict Registrierte Benutzer Email Bestätigung

Identität geändert wird zunächst eine Bestätigungs-Email an den Benutzer zu schicken, um ihre E-Mail-Adresse zu bestätigen. Der Benutzer erhält den Link per E-Mail und klickt ihn an. Sie loggen sich dann ein. Einfach. In der Zwischenzeit können sie auf keine Seiten zugreifen.

Aber ich merkte, Postbote mit, sie die Lösung über APIs durch OpenIDDict zugreifen können. Sie werden immer noch autorisiert. Und wenn sie autorisiert werden, können sie auf APIs zugreifen.

Da ich gerade geschrieben das ich habe ein Gehirn Waive hatte und ich konnte den Code in das AuthenticationController während des Austauschs Aktion einfach vorstellen:

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! Da gehst du ... beantwortete meine eigene Frage. Mya hilft anderen in der Zukunft

Antwort

0

Während Ihre Lösung funktioniert, möchten Sie vielleicht ASP.NET Core Identity konfigurieren, um die Überprüfung "E-Mail bestätigt" für Sie beim Aufruf SignInManager.CanSignInAsync(user). Sie können dies in den Identitätsoptionen konfigurieren:

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

Vielen Dank. Aber dieser Zusatz zur AddIdentity ist es, der es an erster Stelle auslöst! Also Ihr Recht, das stellt sicher, dass eine Bestätigungsemail an einen Benutzer gesendet wird. Die Änderungen in meinem Post sind, wie man es dann von OpenIdDict aus behandelt, da dies auch überprüft werden muss. Der Vollständigkeit halber sollte der E-Mail-Check auch in externen Provider-Checks gepostet werden, da Social Media dies nicht benötigt – Bhail

+0

Sie haben meinen Punkt verpasst: Die Verwendung von 'IsEmailConfirmedAsync' in Ihrem eigenen Code ist nicht notwendig, wie es für Sie erledigt ist 'CanSignInAsync', wenn die Option 'RequireEmailConfirmation' aktiviert ist. – Pinpoint

+0

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

Verwandte Themen