Angularjs,来自后端的令牌中的值不在客户端工作

时间:2016-09-22 10:53:28

标签: angularjs token

它无法正常工作的代码有什么问题,我试图从Spring编写的后端请求调用Web服务,从后端传递的值是令牌包装的,我试图在客户端运行代码但是表单不是传递任何价值。

auth.js

'use strict';

angular. module('app')
        .factory('Auth', [ '$http', '$rootScope', '$window', 'Session', 'AUTH_EVENTS',
            function($http, $rootScope, $window, Session, AUTH_EVENTS) {
                var authService = {};
                this.isLoggedIn = function isLoggedIn(){
                    return session.getUser() !== null;
                };

                //the login function
                authService.login = function(user, success, error) {
                    $http.post('URL: http://xxx.xxx.x.xx:xxxx/xxxx/authenticateUser').success(function(authData) {
                        //user is returned with his data from the db
                        var users = data.users;
                        if(users[user.username]){
                            var loginData = users[user.username];

                            //insert your custom login function here
                            if(user.username == loginData.username && user.password == loginData.username){

                                localStorageService.set(['userInfo'],
                                        { token: result.access_token, userName: loginData.userName });

                                //delete password no/t to be seen clientside
                                delete loginData.password;

                                //update current user into the Session service or $rootScope.currentUser
                                //whatever you prefer
                                Session.create(loginData);
                                //or
                                $rootScope.currentUser = loginData;

                                //fire event of successful login
                                $rootScope.$broadcast(AUTH_EVENTS.loginSuccess);
                                //run success function
                                success(loginData);
                            } else{
                                //OR ELSE
                                //unsuccessful login, fire login failed event for
                                //the according functions to run
                                $rootScope.$broadcast(AUTH_EVENTS.loginFailed);
                                error();
                            }
                        }
                    });

                };

                //check if the user is authenticated
                authService.isAuthenticated = function() {
                    return !!Session.user;
                };

                //check if the user is authorized to access the next route
                //this function can be also used on element level
                //e.g. <p ng-if="isAuthorized(authorizedRoles)">show this only to admins</p>
                authService.isAuthorized = function(authorizedRoles) {
                    if (!angular.isArray(authorizedRoles)) {
                        authorizedRoles = [authorizedRoles];
                    }
                    return (authService.isAuthenticated() &&
                    authorizedRoles.indexOf(Session.userRole) !== -1);
                };

                //log out the user and broadcast the logoutSuccess event
                authService.logout = function(){
                    Session.destroy();
                    localStorageService.removeItem("userInfo");
                    $rootScope.$broadcast(AUTH_EVENTS.logoutSuccess);
                }

                return authService;
            } ]);

authInterceptor

(function () {
    'use strict';

    var app = angular.module('app');
    var factoryId = 'authInterceptor';

    app.factory(factoryId, authInterceptor);

    authInterceptor.$inject = ['$q', '$location', 'localStorageService', $rootScope, $http];

    function authInterceptor($q, $location, localStorageService) {

        var service = {
            request: request,
            responseError: responseError,
        };

        return service;

        function request(config) {

            config.headers = config.headers || {};

            var authData = localStorageService.get('authorizationData');
            if (authData) {
                config.headers.Authorization = 'Bearer ' + authData.token;
            }

            return config;
        }

        function responseError(error) {
            var loggedIn = false;
            var authData = localStorageService.get('authorizationData');
            if (authData) {
                loggedIn = true;
            }
            //We only want to go to the login page if the user is not
            //logged in. If the user is logged in and they get a 401 is
            //because they don't have access to the resource requested.
            if (error.status === 401 && !loggedIn) {
                $location.path('/login').replace();
            }

            return $q.reject(error);
        }
    }
})();

0 个答案:

没有答案