javascript - Angularjs 身份验证问题

标签 javascript java angularjs spring

我正在尝试在我的 angularjs 应用程序中实现基于 JWT 的身份验证。但我正在努力解决请求 header 问题。问题是我有一个调用服务的 Controller ,并且这个 Controller 返回一个 token 。这一步效果很好。

'use strict';

angular.module("home.controllers", ['home.services', 'ngStorage'])

.controller('HomeController', ['$scope', '$location', '$http', '$localStorage', 'HomeService',
function($scope, $location, $http, $localStorage, HomeService) {


    function login(user, password) {

        HomeService.login(user, password).then(

            function(loginResult) {
                var token = loginResult.token;

                if (loged()) {
                    $localStorage.token = token;
                    $http.defaults.headers.common.Authorization = 'Bearer ' + token;
                    console.log($location.path('secure/index'));
                    $location.path('secure/index');
                }
            },

            function(err) {
                console.error(err);
            }
        );
    }

    function loged() {
        return $scope.token !== null;
    }

    return {

        loged: function() {
            return loged();
        },

        login: function(user, password)) {
        return login(user, password)
    }
};

}]);

但问题是,我想在登录到“secure/index”后使用请求中的“Authentication” header 将用户重定向,因为我有一个 Spring 过滤器检查所有“*/secure”路径是否具有该 header .

主要的app.js如下

'use strict';

angular.module("home", ['ui.router', 'home.controllers', 'urlLanguageStorage', 'pascalprecht.translate', 'ui.bootstrap', 'ngStorage'])

.config(['$stateProvider', '$translateProvider', '$urlRouterProvider',
    function($stateProvider, $translateProvider, $urlRouterProvider) {

        $translateProvider.useUrlLoader("home/mensajes");
        $translateProvider.useStorage("UrlLanguageStorage");
        $translateProvider.preferredLanguage("en");
        $translateProvider.fallbackLanguage("en");

        $stateProvider
            .state("home", {
                url: "/",
                templateUrl: "resources/js/home/views/home/home.html",
                controller: "HomeController"
            });

        $stateProvider
            .state("contacto", {
                url: "/contacto",
                templateUrl: "resources/js/home/views/contact/contac.html",
                controller: "HomeController"
            });
    }
])

.run(['$localStorage', '$http', function($localStorage, $http) {

    if ($localStorage.token) {
        $http.defaults.headers.common.Authorization = 'Bearer ' + $localStorage.token;
    }
}]);

问题是它不会重定向页面。我尝试使用 $window.href 而不是 $location,它成功重定向页面,但请求中没有 auth header 。

对此有什么想法/建议吗?请注意,我是 Angularjs 的初学者,所以可能还有更多错误。

提前致谢

最佳答案

看起来,一旦您获得了 token ,您就会使用 $location.path('secure/index'); 重定向到 secure/index。但是,您的示例代码没有显示映射到 secure/index 的状态。

关于javascript - Angularjs 身份验证问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40352978/

相关文章:

java - 给构造函数命名有什么意义

angularjs - 安装 Yeoman 错误

javascript - 使用 promise 的 $scope 问题

javascript - 从 AngularJS 中的子指令获取对 Controller 的访问权限

javascript - 忽略 CSS 过渡

javascript - Jquery 事件在 ajax 调用后绑定(bind)两次

Java JTextPane 或 JTextArea 在换行之前设置每行字符

javascript - date.getDate() 不是函数。 (在 'date.getDate()' 中, 'date.getDate()' 未定义)Ionic 3 中的 FullCalendar

javascript - 选择 ng-options 不使用 ajax 更新 AngularJS 中的 ng-model

java - 调用 EJB 方法时出现 CORBA.COMM_FAILURE