2017-02-20 3 views
0

ich eine Menge von Ressourcen gesucht, aber keiner war angemessen mein problem.I auf single page application (SPA) Projekt arbeite, und ich möchte ein logged in user zu stay logged in, wenn er die Seite aberohneRouting aktualisiert.Wie authentifiziert man eingeloggten Benutzer beim Auffrischen der einzelnen Seite Anwendung mit AngularJS ohne "Routing"?

habe ich versucht, session authentication servlet im Haupt controller der Seite (das Servlet überprüft, ob die Sitzung vorhanden ist oder nicht) zu nennen, aber es hat nicht funktioniert.

Hinweis: Die Sitzung wird erstellt, sobald der Benutzer log in oder sing up. Hier ist SessionAuthServlet.java:

HttpSession session = request.getSession(true); 
User u=(User) session.getAttribute("usersession"); 
try{ 
    response.setContentType("application/json; charset=UTF-8"); 
    PrintWriter out = response.getWriter(); 
    if(u != null) 
    { 
     out.println("{\"+success+\"}"); 
     out.close(); 
    } 
    else 
    { 
     out.println("{ \"result\": \"fail\"}"); 
     out.close(); 
    } 
    }catch (IOException e) { 
     e.printStackTrace(); 
} 

MainController in HTML einzigen Seite Anwendung:

appvar.controller('MianController',['$scope','$http','$rootScope',function($scope, $http,$rootScope) {      
    $rootScope.sessionvalid=function(){ 
     $http.get("http://localhost:8080/MyProject/SessionAuthServlet") 
     .success(function(response) { 
      if (response.result=="fail") 
       { 
        //***Show the view for not logged user  
       } 
        //***Show the view for logged user 
       } 

       $rootScope.sessionvalid(); 
     }); 
    } 
}]); 

Irgendwelche Ideen, wie man damit umgehen?

Bitte leite mich

Dank

+0

Verwenden Sie lokalen Speicher oder Sitzung –

Antwort

0

Hier ist, wie Sie ohne Routing nach Aktualisierung der Seite angemeldet bleiben kann. Sie benötigen unter drei Dinge

  1. Ein eckiger Service für Benutzerinformationen und wenn er authentifiziert ist oder nicht.
  2. Ein Fenster-Session-Speicher zum Speichern von Benutzerinformationen. Selbst wenn die Seite referenziert wird, bleiben die Benutzerinformationen im Sessionspeicher
  3. Ein Interceptor, um Anfrage und Antwort zu setzen.

Servicecode -

app.service('AuthenticationService', function() { 
     var auth = { 
      isLogged: false, 
      email:"", 
      isAdmin:false 
     } 
     return auth; 
    }); 

In Ihrem MainController, wenn Benutzer in stellen Sie die AuthenticationService.isLogged = true und $ window.sessionStorage = userinfo

Interceptor angemeldet ist Code-

app.service('TokenInterceptor', function ($q, $window, $location, AuthenticationService) { 
return { 
    request: function (config) { 
     config.headers = config.headers || {}; 
     if ($window.sessionStorage.token) { 
      config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token; 
     } 
     return config; 
    }, 

    /* Set Authentication.isAuthenticated to true if 200 received */ 
    response: function (response) { 
     if (response != null && response.status == 200 && $window.sessionStorage.token && !AuthenticationService.isAuthenticated) { 
      AuthenticationService.isAuthenticated = true; 
     } 
     return response || $q.when(response); 
    } 
}; 
}); 

und in Ihrem app.config Block dieses Add -

app.config(function($httpProvider){ 
    $httpProvider.interceptors.push(TokenInterceptor); 
}) 

Jetzt ist Ihr AuthenticationService.isLogged auch treu bleiben wird, wenn die Seite refershed und Sie können die in der Benutzerinformationen in den Dienst angemeldet bekommen.

Verwandte Themen