2017-10-17 3 views
3

Ich bin neu in Aspnet Core 2.0 und was ich erreichen möchte, ist einen Benutzer, der ihr Profil nicht abgeschlossen hat, auf eine Seite umzuleiten, die sie tun können. Ich verwende die Standardvorlage mit Benutzerauthentifizierung für Identity Server.Wie stelle ich sicher, dass ein Benutzer sein Profil in aspnet core 2.0 vervollständigt?

Ich habe versucht, mit Middleware, aber die Seite, die ich umleiten, kommt leer. Ist dies der beste Ansatz oder kann jemand helfen, damit es funktioniert? Hier ist meine Middleware.

public class FarmProfileMiddleware 
{ 
    private readonly RequestDelegate next; 

    public FarmProfileMiddleware(RequestDelegate next) 
    { 
     this.next = next; 

    } 

    public async Task Invoke(HttpContext context, UserManager<ApplicationUser> userManager) 
    { 
     var user = await userManager.GetUserAsync(context.User); 
     if (user != null) 
     { 
      if (!user.EmailConfirmed && !context.Request.Path.ToString().Contains("profile")) 
      { 
       var url = context.Request.PathBase + "/Users/Profile"; 
       context.Response.Redirect(url);  
      } 
     } 
     else 
     { 
      await next(context); 
     } 
    } 
} 

Vielen Dank im Voraus.

+0

Gerade in der aktuellen Logik in Ihrem Code sucht ich feststellen, dass, wenn der Benutzer nicht null ist und sein Profil hat, wird Kurzschluss beendet das Gespräch. Sie müssen diese Logik hinzufügen. Dies kann ein X-Y Problem sein – Nkosi

+0

Hallo @ Nkosi, danke für die schnelle Antwort. Ich habe die else-Bedingung entfernt und einfach 'next next (context) genannt;' nach der if-Anweisung bekomme ich immer noch eine leere Seite. –

Antwort

3

Wenn ich mir die aktuelle Logik in Ihrem Code anschaue, merke ich, dass wenn der Benutzer nicht null ist und sein Profil fertig ist, der Anruf kurzgeschlossen wird. Sie müssen diese Logik hinzufügen.

Versuchen Sie, die folgenden

var user = await userManager.GetUserAsync(context.User); 
if (user != null && !user.EmailConfirmed && !context.Request.Path.ToString().Contains("profile")) { 
    var url = context.Request.PathBase + "/Users/Profile"; 
    context.Response.Redirect(url);    
} else { 
    await next(context); 
} 
+0

danke @ Nkosi. Das funktioniert perfekt. –

Verwandte Themen