2015-02-06 80 views
1

我正在为我的应用程序构建一些身份验证。现在,我将张贴到创建JWT的服务器上。我发回令牌,但我不知道如何捕捉它。我在服务器上使用Node/Express,在前端使用Angular。这里是端点和Angular函数。如何生成JWT并将其返回到我的应用程序Angular,Node,Express

app.post('/session', function (req, res, next){ 
     var username = req.body.username 
     // validate password 
     var token = jwt.encode({username: username}, secretKey) 
     res.json(token) 
    }) 

$scope.login = function (username, password) { 
      console.log('submitting to server') 
      var creds = { 
      username: $scope.username, 
      password: $scope.password 
      } 
      var token = $http.post('http://localhost:3002/session', creds) 
      console.log(token) 
     } 

打印的是对象而不是令牌。我可以看到令牌正在正确生成,因为我可以将它打印到服务器的控制台,并通过邮递员生成。

回答

1

为了给出一个更精确的答案...

你非常非常接近,现在你有

var token = $http.post('http://localhost:3002/session', creds) 

这不是将令牌设置为实际令牌,而是将令牌设置为约定。这很好,这就是你想要做的。

不过,从你必须采取行动这一承诺,你可以做

token.then(function(res){ 
     // res.data should contain your token 
     console.log(res.data) 
    }) 
如前面提到的,但这里是一点点更好的办法

...

var tokenReq = $http.post('http://localhost:3002/session', creds); 

    tokenReq.success(function(data) { 
     // This will fire when the request is successfull 
     // data will contain the response, from there you could 
     // find your token 
     console.log(data); 
    } 

    tokentReq.error(function(data) { 
     // This will fire if the request is not successfull 
     console.log('Something went wrong!', data); 
    } 

处理所有情况非常整齐。

有一件事总是把我的承诺说成.success或.error时,我总是问自己:“世界上的人怎么知道这是成功还是错误?”

这是由响应的状态码决定的,所以如果你设置状态码为500,404或类似的东西,它会触发.error,200等触发.success。

编辑:还有一件事,看起来好像有可能你没有发回正确的数据。我可能是错的,但我不认为你可以发送res.json(令牌)里面的令牌,我不认为它是有效的JSON。我不想运行我的项目来测试,但这就是我所做的...

var token = createToken(user); 
    res.json({ 
     token: token, 
     userData: user 
    }); 
+0

我是否必须手动设置状态码,如res.sendstatus(200)还是隐式?我注意到,无论我是否明确从服务器发送一个邮件,我都会在邮递员中获取状态码。 – user137717 2015-02-06 02:57:24

+0

有的东西会自动发送一定的状态,我相信做res.json会自动发送它为200 – ribsies 2015-02-06 03:00:48

1

您需要链中的$ HTTP用。然后()

$scope.login = function (username, password) { 
      console.log('submitting to server') 
      var creds = { 
      username: $scope.username, 
      password: $scope.password 
      } 
      $http.post('http://localhost:3002/session', creds) 
      .then(function(res){ 
      // res.data should contain your token 
      console.log(res.data) 
      }) 
     }