2017-02-20 16 views
0

Я искал много ресурсов, но ни один не был соответствующим моим problem.I я работаю над проектом single page application (SPA), и я хочу, чтобы logged in userstay logged in всякий раз, когда он обновляет страницу нобезмаршрутизации.Как проверить подлинность зарегистрированного пользователя при обновлении одностраничного приложения с помощью AngularJS без «Маршрутизации»?

Я попытался позвонить session authentication servlet в начало controller страницы (этот сервлет проверяет, существует ли сессия или нет), но это не сработало.

Примечание: сеанс создается после пользователя log in или sing up. Вот 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 в одной странице приложения HTML:

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(); 
     }); 
    } 
}]); 

Любые идеи, как бороться с этим?

Пожалуйста, руководство мне

Благодаря

+0

использование localstorage или сеанс –

ответ

0

Вот как вы можете оставаться зарегистрированным после обновления страницы без использования маршрутизации. Вам понадобится три вещи:

  1. Угловое обслуживание для хранения информации о пользователе, и если он аутентифицирован или нет.
  2. Окно sessionstorage для сохранения информации о пользователе. Даже если страница будет указана, информация пользователя будет сохраняться в sessionstorage
  3. Перехватчик для установки запроса и ответа.

код услуги -

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

В вашем MainController после того, как пользователь вошел в систему установить Service AuthenticationService.isLogged = истина и $ window.sessionStorage = USERINFO

перехватчик код-

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); 
    } 
}; 
}); 

и в вашем app.config блоке добавить это -

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

Теперь ваш AuthenticationService.isLogged останется верным, даже если страница refershed и вы можете получить вошедшие в информации о пользователе в службе.