Ionic Framework + NodeJS身份验证

时间:2017-11-07 08:24:33

标签: node.js angular ionic-framework jwt passport.js

最近几天,我在使用Ionic Framework制作的应用程序中一直在努力进行身份验证。我使用NodeJS作为后端和护照JWT策略进行身份验证。我现在开始运行,但这是我的第一次认证,我不知道什么是最佳实践,我已经看到了很多不同的方法。

目前我正在将令牌保存到本地存储,而在我的主控制器中,我正在检查用户是否有令牌等等,这是我的代码:

mainCtrl.js

angular.module('authApp').controller('mainCtrl', function($scope, Auth) {
    $scope.currentUser = {};

    if(Auth.isLoggedIn()) {
        Auth.getUser().then(function(response) {
            $scope.currentUser = response.data.user;
            console.log(response);
        })
        console.log('User logged in');
    } else {
        $scope.currentUser = false;
        console.log('User not logged in');
    }
});

auth.js

angular.module('authApp').factory('Auth', function($http, API, AuthToken) {
    var service = {};

    service.register = function(user) {
        $http.post(API + '/api/register', user).then(function(response) {
            console.log(response);
        }, function() {
            console.log(response);
        });
    }

    service.login = function(user) {
        var promise = $http.post(API + '/api/login', user).then(function(response) {
            console.log(response);

            AuthToken.setToken(response.data.token);
        }, function() {
            console.log(response);
        });

        return promise;
    }

    service.logout = function() {
        AuthToken.setToken();
    }

    service.isLoggedIn = function() {
        if(AuthToken.getToken()) {
            return true;
        } else {
            return false;
        }
    }

    service.getUser = function() {
        if(AuthToken.getToken()) {
            return $http.get(API + '/api/currentuser');
        } else {
            console.log('User has no token');
        }
    }

    return service;
});

angular.module('authApp').factory('AuthToken', function($window) {
    var service = {};

    service.setToken = function(token) {
        if(token) {
            $window.localStorage.setItem('token', token);   
        } else {
            $window.localStorage.removeItem('token');
        }
    }

    service.getToken = function() {
        return $window.localStorage.getItem('token');
    }

    return service;
});

angular.module('authApp').factory('AuthInterceptors', function(AuthToken) {
    var service = {};

    service.request = function(config) {
        var token = AuthToken.getToken();

        if(token) {
            config.headers['Authorization'] = token;
        }

        return config;
    }

    return service;
});

这很有效。例如。在我的/个人资料页面中,我可以通过{{currentUser.name}}等显示用户个人资料,但这是最佳做法,还是应该将当前用户信息保存在其他位置?

0 个答案:

没有答案