2016-04-17 15 views
3

Grundsätzlich habe ich eine Login-/Registrierungs-Zielseite meiner App. Nachdem ein Benutzer sich angemeldet oder registriert hat, möchte er nicht mehr auf diese Route zugreifen können. Ich bin mir nicht sicher, wie ich das mit Hapi.js erreichen kann. Die Anmeldeseite verwendet keine Authentifizierungsstrategien, daher hat sie keine Ahnung, ob ein Benutzer angemeldet ist oder nicht.Login-Route deaktivieren, wenn ein Benutzer bei Hapi.js angemeldet ist

Antwort

7

Der Ansatz, den ich normalerweise dafür verwende, ist nicht die Route per se zu deaktivieren, sondern eingeloggte Benutzer von der Login-Route abzulenken.

Wie Sie richtig angeben, weiß Ihre Login-Route derzeit nicht, ob ein Benutzer angemeldet ist, wenn keine Authentifizierungsstrategie konfiguriert ist. Die Lösung ist hinzufügen eine Auth-Strategie für die Login-Route, aber mit der versuchen Modus. Dies bedeutet, dass der Handler ausgeführt wird, unabhängig davon, ob Auth erfolgreich war. Der Trick ist, dass Sie dann überprüfen können, ob der Benutzer authentifiziert ist (indem Sie den Wert request.auth.isAuthenticated überprüfen) oder nicht und entsprechend reagieren.

So könnte Ihre Route wie folgt aussehen:

server.route({ 
    config: { 
     auth: { 
      strategy: 'session', 
      mode: 'try' 
     } 
    }, 
    method: 'GET', 
    path: '/login', 
    handler: function (request, reply) { 

     if (request.auth.isAuthenticated) { 
      return reply.redirect('/');  // user is logged-in send 'em away 
     } 

     return reply.view('login');   // do the login thing 
    } 
}); 

Ein anderer Ansatz mit dem gleichen Ergebnis ist Ihre Auth-Strategie setzen auf versuchen Modus als Standard für alle Routen:

server.auth.strategy('session', 'cookie', 'try', {  
    password: 'password-that-is-longer-than-32-chars', 
    isSecure: true 
}); 

Beachten Sie, dass das dritte Argument try. Bei dieser Vorgehensweise müssen Sie der Route selbst keine auth-Konfiguration hinzufügen, da diese Strategie standardmäßig versucht wird. Nach dem server.auth.strategy docs:

mode - wenn sie wahr ist, wird die Regelung automatisch als eine erforderliche Strategie zu jeder Strecke ohne Auth Config zugewiesen. Kann nur einer einzelnen Serverstrategie zugewiesen werden. Der Wert muss wahr sein (entspricht dem Wert "erforderlich") oder ein gültiger Authentifizierungsmodus ("erforderlich", "optional", "versuchen"). Der Standardwert ist false.

Es gibt weitere Informationen über Modi in der Authentication tutorial auf der Hapi-Site.

+1

Große Antwort, ich weiß nicht, wie ich die 'try' Option übersehen habe. –

Verwandte Themen