2016-03-07 1 views
0

je suis débutant dans AngularJS, j'ai lu un tutoriel sur la connexion et l'authentification avec js angulaire mais je suis encore confus dans de nombreux points de mon code, pour l'instant je suis arrivé à se connecter et stocker un jeton dans le navigateur session, mais je ne peux pas rediriger vers la page d'accueil après vous reconnecter à, ici est myservice:mécanisme d'authentification dans angularjs

function authenticationSvc ($http, $q, $window, auth_uri) { 

    var userInfo; 

    function login(username, password) { 

    var deferred = $q.defer(); 

    $http.post(auth_uri, { 
     username: username, 
     password: password 
    }).then(function(result) { 

     userInfo = { 
     accessToken: result.data.token 
     }; 

     $window.sessionStorage["pallas_token"] = result.data.token; 

     deferred.resolve(userInfo); 
    }, 
    function(error) { 
     deferred.reject(error); 
    }); 

    return deferred.promise; 
    } 

    function getUserInfo() { 
    return userInfo; 
    } 

    return { 
    login: login, 
    getUserInfo: getUserInfo 
    }; 

}; 

et c'est ma config d'état

.state('dashboard', { 
    url:'/dashboard', 
    controller: 'HomeController', 
    templateUrl: 'partials/dashboard/main.html', 
    resolve:{ 
    auth: function($q, authenticationSvc) { 
     var userInfo = authenticationSvc.getUserInfo();      
     if (userInfo) {      
     return $q.when(userInfo); 

     } else { 
     return $q.reject({ authenticated: false }); 
     } 
    } 
    } 
} 

enfin ce mon bloc .run:

angular 
    .module ('mainApp') 
    .run (function ($rootScope, $state, $location) { 

    $rootScope.$on('$stateChangeSuccess', function(userInfo) { 
     console.log(userInfo);    
    }); 

    $rootScope.$on('$stateChangeError', function(evt, toState, toParams, fromState, fromParams, error) { 
     if (error.authenticated == false) {  
     $state.transitionTo("login"); 
     } 
    }); 
    }); 

s'il vous plaît aidez-moi à résoudre ce problème, je dois aider mes amis :(

je suis désolé d'avoir manqué pour poster mon contrôleur de connexion, il y a:

function LoginController($scope, $state, authenticationSvc){ 
    $scope.submit = function(credentials){ 
    authenticationSvc.login(credentials.username, credentials.password); 
    }; 
}; 
+1

S'il vous plaît montrer également le contrôleur de votre page de connexion – manzapanza

+0

désolé, j'ai encore ajouté mycontroller. –

Répondre

0

Votre méthode de connexion retour d'un promesse de succès lorsque l'utilisateur passe l'authentification. Alors .. vous pouvez modifier votre contrôleur de cette façon:

function LoginController($scope, $state, authenticationSvc){ 
    $scope.submit = function(credentials){ 
    authenticationSvc.login(credentials.username, credentials.password).then(function(){ 
     $state.go('dashboard'); 
     console.log('User logged in!'); 
    }).catch(function(){ 
     console.log('User NOT logged in!'); 
    }); 
    }; 
}; 

MISE À JOUR

Pour maintenir l'état après une page vous actualisez besoin de restaurer l'objet userInfo de sessionStorage. J'ai également ajouté la logique de déconnexion! Jetez un oeil:

function authenticationSvc ($http, $q, $window, auth_uri) { 

    var userInfo; 

    function login(username, password) { 
    ... 
    } 

    function logout() { 
    $window.sessionStorage.removeItem("pallas_token"); 
    userInfo = null; 
    } 

    function getUserInfo() { 
    return userInfo; 
    } 

    function init(){ 
    if ($window.sessionStorage["pallas_token"]){ 
     userInfo = { 
     accessToken: $window.sessionStorage["pallas_token"] 
     };  
    } 
    } 

    init(); 

    return { 
    login: login, 
    logout: logout, 
    getUserInfo: getUserInfo 
    }; 

}; 

Déconnexion:

function LoginController($scope, $state, authenticationSvc){ 
    $scope.submit = function(credentials){ 
    ... 
    }; 

    $scope.logout = function(){ 
    authenticationSvc.logout(); 
    $state.go('login'); 
    console.log('User logged out!'); 
    }; 
}; 

Enjoy!

+0

grand merci manzapanza pour cette aide, qui a fonctionné pour moi, –

+0

Bon! Si la réponse était correcte, vous devriez envisager de l'accepter. Pourquoi? http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – manzapanza

+0

Comment puis-je gérer l'actualisation de la page pour éviter l'état de perte de mon service? –