2016-02-02 12 views
5

ich eine Login-API, die ich in meinem DienstSeitenaktualisierung verursacht Benutzer zu erhalten ausloggen automatisch in Winkel js

function logInToService(callback, errback, login, password, rememberLogin) { 
      var url = "User/Login"; 

      var authorizationHeader = {'Authorization': "Basic " + login + ":" + password}; 
      httpWrapperService.post(url, {login: login, password: password}, authorizationHeader).then(
       function success(loginToken) { 
        // transform data here 

        self.currentUser.emailAddress = login; 
        self.currentUser.password = password; 
        // store token in a cookie 
        self.currentUser.token = loginToken; 
        $rootScope.currentUser = self.currentUser; 


        if (rememberLogin) { 

         localStorage.userName=login; 
         localStorage.password=password; 
        } 

        httpWrapperService.setAuthenticationToken(loginToken); 
        callback(loginToken); 
       }, 
       function error(errorObject) { 
        errback(errorObject); 
       } 
      ); 
     } 

Und in meinem Kopf html verwende ich auf den Benutzernamen am anzuzeigen, wenn er in header.html

<div class="header-user-menu"> 
     <div ng-show="isUserLoggedIn() == false "> 
      <a href="" ng-click="$state.go('app.sr.login')" class="">{{'HEADER.LOGIN' | translate}}</a> 
      <!--<a ui-sref="app.sr.login" class="">{{'HEADER.LOGIN' | translate}}</a>--> 
     </div> 
     <div ng-show="isUserLoggedIn()" class="userName">{{'HEADER.WELCOME' | translate}} {{currentUser.emailAddress}}</div> 

    </div> 

und js-Datei protokolliert wird hier

(function() { 
    'use strict'; 

    angular 
     .module('safe-repository') 
     .controller('AppLayoutCtrl', appLayoutCtrl); 

    // Implementation of controller 
    appLayoutCtrl.$inject = ['$rootScope', '$scope']; 

    function appLayoutCtrl($rootScope, $scope) { 


     $scope.isUserLoggedIn = isUserLoggedIn; 

     function isUserLoggedIn() { 
      if ($rootScope.currentUser 
       && $rootScope.currentUser.emailAddress != null 
       && $rootScope.currentUser.emailAddress != '') { 
       return true; 
      } 
      return false; 
     } 

    } 
})(); 

und hier habe ich einen Registrierungsservice, wo ich logInToService Methode

function registrationService($rootScope, httpWrapperService, $modal, $state, $cookieStore) { 
     var self = this; 
     // expose functions 
     self.hasUserAccessToLevel = hasUserAccessToLevel; 
     self.logInToService = logInToService; 
     self.getCurrentUserToken = getCurrentUserToken; 
     self.showRegistrationViewForLevel = showRegistrationViewForLevel; 
     self.currentUser = { 
      //emailAddress: '', 
      //password: '', 
      //token: '' 
     } 

     $rootScope.currentUser = null; 
     self.currentUserToken = null; 

function logInToservice (------){----}})(); 

Das Problem, dass jedes Mal ist definiert haben, wenn der Benutzer drückt Aktualisierung der Seite F5, wird Benutzer abgemeldet. Obwohl ich versuche, die Daten im lokalen Speicher zu speichern, erhalte ich jedoch nicht den Kontrollfluss.

Antwort

6

Sie versuchen, die Daten in localstorage zu sparen, aber Sie lesen nicht. Die currentUser Variable, in der die Benutzerdaten enthalten sind, ist eine reguläre JavaScript-Variable, die beim erneuten Laden der Seite zurückgesetzt wird.

Sie brauchen so etwas wie dies zu tun:

// ... 
// user logs in, remember it into the local storage 
// Note: is is better to use it via $window.localStorage 
$window.localStorage.setItem('user', JSON.stringify(user)); 
this.currentUser = user; 

//... 
// function to get the user, if this.currentUser is not set, 
// try to load from the local storage 
getUser: function() { 
    if (this.currentUser) { 
     return this.currentUser; 
    } 
    var storageUser = $window.localStorage.getItem('user'); 
    if (storageUser) { 
    try { 
     this.user = JSON.parse(storageUser); 
    } catch (e) { 
     $window.localStorage.removeItem('user'); 
    } 
    } 
    return this.currentUser; 
} 

// you may also want to remove the user data from storage when he logs out 
logout: function() { 
    $window.localStorage.removeItem('user'); 
    this.currentUser = null; 
},