使用Node.js进行Angular.js身份验证

时间:2017-04-08 05:21:25

标签: angularjs node.js authentication angular-ui-router

我无法使用前端登录可能是Angular-ui-Router的问题。当我点击登录按钮时,我得到一个错误'可能是未处理的拒绝'然后我在添加$ qProvider后在配置文件中注入'$ qProvider'我没有在控制台中看到任何错误但是页面没有改变它状态而在在网络选项卡中,我可以看到令牌是从服务器发送的。有人可以帮助我。

App.config.js

angular.module('myApp', ['ui.router', 'myAppModel'])
        .config(function($qProvider, $stateProvider, $urlRouterProvider) {
            $urlRouterProvider.otherwise('/');
            $qProvider.errorOnUnhandledRejections(false);
            $stateProvider
                .state('base', {
                    abstract: true,
                    views: {
                        'nav@': {
                            template: '<navigation1></navigation1>'
                        }
                    }
                })
                .state('base.login', {
                    parent: 'base',
                    url: '/',
                    views: {
                        'main@': {
                            template: '<login></login>'
                        }
                    }
                })
                .state('base.register', {
                    parent: 'base',
                    url: '/register',
                    views: {
                        'main@': {
                            template: '<register></register>'
                        }
                    }
                })
                .state('base.dashboard', {
                    parent: 'base',
                    url: '/dashboard',
                    views: {
                        'main@': {
                            template: '<dashboard></dashboard>'
                        }
                    }
                })
        });

login.js

angular.module('myAppModel')
        .component('login', {
            templateUrl: '/components/login/login.html',
            controller: function loginCtrl(Authentication, $state) {
                var ctrl = this;

                ctrl.pageHeader = 'Login';

                ctrl.credentials = {
                    email: '',
                    password: '' 
                };

                ctrl.onSubmit = function () {
                    ctrl.formError = '';
                    if(!ctrl.credentials.email || !ctrl.credentials.password) {
                        ctrl.formError = 'All fields required, please try again';
                        return false;
                    }else {
                        ctrl.doLogin();
                    }
                };

                ctrl.doLogin = function () {
                    ctrl.formError = '';
                    Authentication.login(ctrl.credentials).then(function(status) {
                        console.log(status);
                        $state.go('base.dashboard');
                    });
                };

            }
        });

认证-service.js

angular.module('myAppModel')
        .service('Authentication', function ($window, $http) { //Register new service with application and inject $window service
            var saveToken = function (token) {  //create a saveToken method to save a value to localStorage
                $window.localStorage['app-token'] = token;
            };

            var getToken = function () {    //Create a getToken method to read a value from localStorage
                return $window.localStorage['app-token'];
            }

            var register = function (user) {
                return $http.post('/api/users/register', user).then(function(data){
                    saveToken(data.token);
                });
            };

            var login = function (user) {
                return $http.post('/api/users/login', user).then(function (data) {
                    saveToken(data.token);
                });
            };

            var logout = function () {
                $window.localStorage.removeItem('app-token');
            };

            var isLoggedIn = function () {
                var token = getToken(); //Get token from storage

                if(token) { //If token exists get payload decode it, and parse it to JSON
                    var payload = JSON.parse($window.atob(token.split('.')[1]));
                    return payload.exp > Date.now() / 1000; //validate whether expiry date has passed
                }else {
                    return false;
                }
            };

            //Getting User Information from the JWT
            var currentUser = function () {
                if (isLoggedIn()) {
                    var token = getToken();
                    var payload = JSON.parse($window.atob(token.split('.')[1]));
                    return {
                        email: payload.email,
                        name: payload.name
                    };
                }
            };

            return {
                saveToken: saveToken,   //Expose methods to application
                getToken: getToken,
                register: register,
                login: login,
                logout: logout,
                isLoggedIn: isLoggedIn,
                currentUser: currentUser
            };

        });

0 个答案:

没有答案