【问题标题】:How to consume token based node api in to angular js如何在 Angular js 中使用基于令牌的节点 api
【发布时间】:2017-04-15 15:00:28
【问题描述】:

我在登录时使用 node.js 创建令牌:

apiRoutes.put('/login', function(req, res, next){
  User.findOne({email:req.body.email}, function(err, user){
    bcrypt.compare(req.body.password, user.password, function(err, result){
       if(result){
        var token=jwt.encode(user,config.secret); 
        return res.json({success: true, token:'JWT' +token});         
      }else{
        return res.json("Incorrect Email and Password")
      }
    })
  })
});

现在我正在尝试使用/dashboard 路由显示用户仪表板页面,我正在执行以下操作:

apiRoutes.get('/dashboard',function(req, res) {
  var token=getToken(req.headers); 
  if(token){
    var decode=jwt.decode(token, config.secret); 
    console.log(decode);
    User.findOne({name:decode.name}, function(err, user){
      if(err){res.json(err)}
        if(!user){
          return res.status(403).send({success:false, msg:'Authentication Failed'})
        }else{
          res.json({success:true, msg:'Welcome in the Area  ' +user.name+'!' })
        }
    })
  }else{
    return res.status(403).send({success:false, msg:'No Token Found'})
  } 
  });

 getToken = function (head) {
  if (head && head.authorization) { 
    var parted = head.authorization.split(' '); 
    if (parted.length == 2) {  
      return parted[1];
    } else {
      return null;
    }
  } else {
    return null;
  }
}; 

postman 中,当我点击/dashboard api 时,它运行良好。并打印输出success:true, msg:'Welcome in the Area Admin; 但是当我在 angular js 中使用这个 api 时,节点控制台中的输出是null。 下面是我使用 api 的角度函数

 app.controller('dashboardCtrl', function($scope, $http, $location, $routeParams){ 
        $http.get('/api/dashboard').success(function(res){
            $scope.result=res;  
        })
    })

我想知道如何在 Angular 中使用基于令牌的路由。我知道上面给出的角度函数是不正确的。请告诉我正确的代码。

谢谢

【问题讨论】:

    标签: angularjs node.js token


    【解决方案1】:

    您没有为$http.get() 设置标题。这是你应该做的:

    $http.get('/api/dashboard', {
      headers: {
        // Set header for the request here
        authorization: token
      }
    })
    .success(function(res) {
      // Success
    });
    

    【讨论】:

    • 令牌未定义
    • 不,token 来自您的$http.put('/api/login') 的回复。我只是抽象了那部分,因为我假设您已经这样做并将响应保存在 token 变量中。
    • 是的,我做到了...就像 $scope.login=function(){ $http.put('/api/login', $scope.new).then(function(response){ $cookieStore.put('token', response.data.token); $cookieStore.put('currentUser', $scope.new.email); $rootScope.token=response.data.token; $rootScope.currentUser=$ scope.new.email; $location.path('/dashboard'); $scope.loggindata=response; },function(err){ alert('不正确的电子邮件和密码'); }); }
    • 我看到你把token 放在cookies$rootScope 中。所以,在$http.get(..);之前添加这一行:var token = $rootScope.token
    • var token = $rootScope.token; $http.get('/api/dashboard',{ headers: {authorization: token }}).success(function(res){ $scope.result=res; }) 在浏览器控制台中出现错误/api/dashboard (403)禁止
    猜你喜欢
    • 2018-11-02
    • 2019-09-20
    • 2018-12-26
    • 2019-01-02
    • 1970-01-01
    • 2020-12-21
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多