2016-05-19 7 views
0

Ich bin ein Neuling in angularjs wie kann ich überprüfen, ob der Benutzer angemeldet ist? Ich bin mit sailsjs Backend und AngularJS Frontend

module.run(function ($location, $rootScope) { 
     $rootScope.$on("$routeChangeStart", function (event, next, current) { 

     }); 
    }) 

signin.js

.controller('SigninCtrl', function ($scope,$location,User,$http) {    


    $scope.signin = function(){ 
    var data={ email:$scope.email,password:$scope.password} 
     var user=User.signin(data); 
     //console.log(typeof user); 
    user.success(function (data) { 
        //console.log("token signin",data); 
        var token=data.token; 
       localStorage.setItem('id_token', token); 
        $location.path("/todo"); 
       }) 
       .error(function (data) { 
        //Do whatever is needed 
       //console.log(data); 
       }); 
     } 

    }); 

Service: user.js signin: function (data) {

  return $sails.post('/api/auth',data); 
     }, 
+0

Als erstes, um Ihren Code zu verbessern, werden Sie das Zeichen in der Logik zu seiner eigenen Fabrik abstrahieren wollen. –

+0

@CallumLinington wie? Kannst du mir ein Beispiel geben? – loveyourserlf

+0

arbeiten daran, geben Sie mir eine min –

Antwort

0

Richtig, ich habe etwas ziemlich Einfaches getan. Siehe hierzu plnkr für weitere Details.

userHttpService würde normalerweise $http wickeln, aber da ich keinen Endpunkt habe, um tatsächlich zu schlagen, fälsche ich ein Versprechen unter Verwendung der $q Bibliothek.

routeConfig ist ein Provider, den Sie zur Konfigurationszeit einrichten können, um mit Routen zu konfigurieren, zu denen Sie gehen dürfen. Wenn Sie etwas wie ui router verwenden, können Sie etwas eleganter mit einem settings Objekt auf dem Routen-Setup tun. Wenn Sie etwas viel eleganter und fortschrittlicher sehen möchten, schauen Sie sich diese repo.

Die Config geht wie so:

app.config(function($routeProvider, $locationProvider, routeConfigProvider) { 

    $routeProvider.when('/home', { template: '<h2>Home</h2><p>Please do something</p>' }) 
    $routeProvider.when('/login', { controller: 'LoginController', template: '<h2>Login</h2><div><p><span>Name:</span><input type="text" ng-model="name" /></p><p><span>Password:</span><input type="password" ng-model="password" /></p></div><div><p><button type="submit" ng-click="login()">Login</button></p></div><div><p>{{error}}</p></div>' }); 
    $routeProvider.when('/profile', { controller: 'ProfileController', template: '<h2>Profile</h2><div><p><span>Name:</span>{{name}}</p></div>' }); 

    $routeProvider.otherwise('/home'); 

    $locationProvider.html5Mode(true); 


    routeConfigProvider.addRouteWhenLoggedIn('/profile'); 
    routeConfigProvider.addRouteWhenLoggedIn('/home'); 

    routeConfigProvider.addRouteWhenLoggedOut('/home'); 
    routeConfigProvider.addRouteWhenLoggedOut('/login'); 
}); 

ich alle meine Vorlagen nur gebündelt in es für meine eigene einfache Bedienung. Ich ziehe meine routeConfigProvider (beachten Sie, dass Sie Provider nicht hinzufügen, wenn Sie es nennen .provider('routeConfig', ..., Winkel tut dies für Sie).

Dann gehe ich Routen zu den verschiedenen Tabellen hinzufügen, eine Tabelle sind für Routen, die Sie navigieren können, wenn Sie angemeldet sind, und die andere, für Routen können Sie zu navigieren, wenn Sie angemeldet sind aus.

Unten ist, wo Sie tatsächlich auf der Navigation der Route handeln.

app.run(function ($rootScope, routeConfig, userService) { 
    $rootScope.$on('$routeChangeStart', function (e, c, p) { 
    var topath = c.$$route.originalPath; 

    if (userService.isLoggedIn()) { 
     if (!routeConfig.isAllowedWhenLoggedIn(topath)){ 
     e.preventDefault(); 
     // you can use $location.path to redirect if you wish 
     } 
    } else { 
     if (!routeConfig.isAllowedWhenLoggedOut(topath)){ 
     e.preventDefault(); 
     // you can use $location.path to redirect if you wish 
     } 
    } 
    }); 
}); 

Es ist ziemlich einfach ist, verwendet er die userService (denken Sie daran, es ist nicht die userHttpService so dass diese die Verantwortung für dishing benutzerspezifische Dinge hat) und fragt, ob der Benutzer angemeldet ist. Dann wird es entweder nachschlagen Routentabelle, um zu sehen, ob sie zur Route navigieren dürfen.

Die e.PreventDefault() ist, wie Sie die Navigation verhindern.

+0

ich benutze diesen Generator https://github.com/42Zavattas/generator-bangular – loveyourserlf

+0

Großartig! sieht wie ein guter Generator aus. –

Verwandte Themen