[英]Send JWT from AngularJS to Node.js
AngularJS应用程序需要与为其提供服务的Node.js实例交换JWT。 Node.js实例具有一个/user
路由,该路由将JWT返回到Angular客户端。 以下代码需要进行哪些具体更改,以便1.)AngularJS应用可以将JWT发送回Node.js实例的/user
路由,并且2.)Node.js代码可以将JWT隔离为变量进行处理?
当前用于调用后端/user
路由的AngularJS代码为:
$http.get('user').then(function(response) {
console.log('response is: ');
console.log(response);
if (response.data.token === 'anonymous') {
$rootScope.authenticated = false;
} else {
$rootScope.userJWT = response.data.token;
var payload = $rootScope.userJWT.split('.')[1];
payload = $window.atob(payload);
payload = JSON.parse(payload);
self.name = payload.name;
self.authorities = payload.authorities;
$rootScope.authenticated = true;
}
}, function() {
$rootScope.authenticated = false;
});
后端/user
路由的Node.js代码为:
app.get('/user**', function(req, res) {
console.log("You Hit The User Route TOP");
//How do we get the JWT from req?
var user = getUserName(theJwt);
var token = getToken(user);
var jwtJSON = getUser(token);
if( (jwtJSON["token"] == 'error') || jwtJSON["token"] == 'anonymous' ) {
res.sendStatus(500); // Return back that an error occurred
} else {
res.json(jwtJSON);
}
console.log("You Hit The User Route BOTTOM");
});
注意,Node.js实例包括var jwt = require('jsonwebtoken');
,其中一种处理方法将使用var decoded = jwt.decode(token, {complete: true});
来解码JWT var decoded = jwt.decode(token, {complete: true});
,按照jsonwebtoken
API进行 。
使用JWT时,没有必要的方式来传递令牌。
最常见的方法是将令牌放入HTTP标头中。
在AngularJS端,您将使用包含JWT的额外标头(例如X-Auth-Token)发出HTTP请求。
AngularJS方面的示例:
var config = {
headers: {
"X-Auth-Token": $rootScope.userJWT
}
}
$http.get('routeThatNeedsJWT', config).then(function(response) { ... });
在Node.js端,您将获取标头的内容并使用jsonwebtoken库对其进行处理。
Node.js方面的示例:
app.get('/routeThatNeedsJWT', function(req, res) {
var rawTokenFromHeader = req.get('X-Auth-Token'); // Get JWT from header
try {
var jwtJSON = jwt.verify(token, 'secret'); // Verify and decode JWT
res.json(jwtJSON);
} catch (err) {
res.sendStatus(500); // Return back that an error occurred
}
});
有用的网址:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.