AngularJS使用JWT Auth记住我的功能

时间:2016-03-09 11:32:20

标签: angularjs

我使用Angular JS开发了一个Spring Web应用程序。对于当前项目,客户端身份验证使用Cookie。 在了解了JWT的优势后, 我使用 JWTs(Json Web Token)重写了应用程序身份验证

我关注的是如何处理" Rember Me"在AngularJS中使用JWT而不使用Cookies功能或Laravel支持的功能

如果您的任何人都可以分享我的建议或示例代码。这真的很有帮助。我尝试搜索互联网,但没有得到一个示例实现来引用。

感谢。

1 个答案:

答案 0 :(得分:2)

在客户端存储JWT的一个选项可能是window.localStorage,它存储没有过期日期的数据。 然后,使用每个$http请求(在Authentication头中),使用Interceptor将此令牌发送到服务器,如下所示,

angular.module('myApp').factory('authInterceptor', ['$q', function ($q) {
        return {
            request: function (config) {
                config.headers = config.headers || {};
                if (config.headers.skipAuthorization === false) {
                    var token = localStorage.getItem('authenticationToken');
                    if (token != null) {

                        config.headers.Authorization = token;
                    }
                }
                return config;
            },
            response: function (response) {
                if (response.headers("Authorization") != undefined || response.headers("Authorization") != '') {
                    localStorage.setItem('authenticationToken', response.headers("Authorization"));
                }
                return response;
            },
            responseError: function (rejection) {
                if (rejection.status === "401") {
                    localStorage.removeItem('authenticationToken');
                }
                return $q.reject(rejection);
            }
        };
    } ]);

    angular.module('myApp').config(['$httpProvider', function ($httpProvider) {
        $httpProvider.interceptors.push('authInterceptor');
    } ]);

对于您希望将此令牌发送到服务器的每个请求,请在标头中设置skipAuthorization:false

$http({
....
headers:{skipAuthorization:false}
}).then(....)