javascript - NodeJs - 从 JWT token 中检索用户信息?

标签 javascript angularjs node.js jwt

Node 和 Angular 。我有一个 MEAN 堆栈身份验证应用程序,我在成功登录时设置 JWT token ,如下所示,并将其存储在 Controller 的 session 中。通过服务拦截器将 JWT token 分配给 config.headers:

var token = jwt.sign({id: user._id}, secret.secretToken, { expiresIn: tokenManager.TOKEN_EXPIRATION_SEC });
            return res.json({token:token});

authservice.js 拦截器(省略 requestError、response 和 responseError):

authServices.factory('TokenInterceptor', ['$q', '$window', '$location','AuthenticationService',function ($q, $window, $location, AuthenticationService) {
        return {
            request: function (config) {
                config.headers = config.headers || {};
                if ($window.sessionStorage.token) {
                    config.headers.Authorization = 'Bearer ' + $window.sessionStorage.token;
                }
                return config;
            }               
        };
    }]);

现在我想从 token 中获取登录用户的详细信息,我该怎么做?我尝试如下,不工作。当我从 Users.js 文件中记录错误时,它显示“ReferenceError: headers is not defined”

authController.js:

$scope.me = function() {
    UserService.me(function(res) {
      $scope.myDetails = res;
    }, function() {
      console.log('Failed to fetch details');
      $rootScope.error = 'Failed to fetch details';
    })
  };

authService.js:

authServices.factory('UserService',['$http', function($http) {
  return {        
    me:function() {
    return $http.get(options.api.base_url + '/me');
    }
  }
}]);

Users.js( Node ):

 exports.me = function(req,res){
    if (req.headers && req.headers.authorization) {
        var authorization =req.headers.authorization;
        var part = authorization.split(' ');
        //logic here to retrieve the user from database
    }
    return res.send(200);
}

我是否也必须将 token 作为参数传递以检索用户详细信息?还是将用户详细信息也保存在单独的 session 变量中?

最佳答案

首先,使用 Passport 中间件进行用户授权处理是一个很好的做法。它承担了解析请求的所有繁琐工作,还提供了许多授权选项。 现在为您的 Node.js 代码。 您需要使用 jwt 方法验证和解析传递的 token ,然后通过从 token 中提取的 id 找到用户:

exports.me = function(req,res){
    if (req.headers && req.headers.authorization) {
        var authorization = req.headers.authorization.split(' ')[1],
            decoded;
        try {
            decoded = jwt.verify(authorization, secret.secretToken);
        } catch (e) {
            return res.status(401).send('unauthorized');
        }
        var userId = decoded.id;
        // Fetch the user by id 
        User.findOne({_id: userId}).then(function(user){
            // Do something with the user
            return res.send(200);
        });
    }
    return res.send(500);
}

关于javascript - NodeJs - 从 JWT token 中检索用户信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33451298/

相关文章:

javascript - 在 angularjs 自定义指令中创建一个 canvas 元素

javascript - 将数据从服务传递到 Controller AngularJS

javascript - 将 ES7 async/await 与 Node 、webpack 和 babel-loader 一起使用时出错

javascript - 更改 CSS div 样式(有条件的?)

javascript - 在包装无效输入字段的 div 上的表单提交上应用类

javascript - jquery .submit 第一次不会被调用

node.js - 在nodejs中使用mongodb更新标签中的特定元素

node.js - 使用 Angular 时有没有办法从服务器端加载部分 View ?

javascript - NodeJS 作为 Google Polymer 1.0 的后端

返回 false;不适用于每个功能