2016-05-19 3 views
0

Я новичок в angularjs, как проверить, зарегистрирован ли пользователь? Я использую sailsjs бэкенд и angularjs передний конец

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

    }); 

обслуживание: user.js зарегистрировались: функция (данные) {

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

Прежде всего, чтобы улучшить код, вы захотите отвлечь логический знак в своей собственной фабрике. –

+0

@CallumLinington как? Можете ли вы дать мне пример? – loveyourserlf

+0

работаю над этим, дайте мне мин –

ответ

0

Правильно, я сделал что-то довольно прямолинейное. См. Это plnkr для более подробной информации.

userHttpService обычно обертывает $http, но поскольку у меня нет конечной точки, чтобы на самом деле ударить, я подделываю обещание, используя библиотеку $q.

routeConfig - это провайдер, который вы можете настроить в режиме конфигурации для настройки маршрутов, к которым вы можете перейти. Если вы используете что-то вроде ui router, вы можете сделать что-то гораздо более элегантное с объектом settings по настройке маршрута. Если вы хотите увидеть что-то гораздо более элегантное и продвинутое, посмотрите на это repo.

Конфигурационный идет как так:

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

Я просто в комплекте все мои шаблоны в там для моей собственной простоты использования. Я втягиваю свой routeConfigProvider (обратите внимание, что вы не добавляете Provider, когда вы назовете его .provider('routeConfig', ..., угловое сделает это за вас).

Затем я собираюсь добавлять маршруты к различным таблицам, одна таблица предназначена для маршрутов, на которые вы можете перейти, когда вы вошли в систему, а другая - для маршрутов, на которые вы можете перейти, когда вы вошли в систему вне.

Ниже приведено фактическое действие навигации по маршруту.

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

Он довольно прост, он использует userService (помните, что это не userHttpService так это несет ответственность за Dishing из пользователя конкретные вещи) и спрашивает, является ли пользователь вошел в систему. Тогда он будет искать либо таблицу маршрута, чтобы проверить, разрешено ли им перемещаться по маршруту.

e.PreventDefault() - как вы предотвращаете навигацию.

+0

Я использую этот генератор https://github.com/42Zavattas/generator-bangular – loveyourserlf

+0

Отлично! выглядит как хороший генератор. –

Смежные вопросы