如何在Node.js应用程序中处理客户端网站上的JWT令牌?
我正在实施用于身份验证的JWT令牌。如何在Node.js应用程序中处理客户端网站上的JWT令牌?
我没有使用像Angular或React这样的客户端站点框架。这只是EJS。
步骤1.我有一个API开发了对成功登录返回令牌上下面(我使用邮差用于测试API)的图片,如下所示:
步骤2.我然后访问受限制的路由并传递带有标记值的授权标头,通过在邮递员中手动输入它,它工作得很好。
我的问题是在哪里和如何保存返回的标记从客户端上的第1步,使其在头发送的第2步
我是新手,Web开发和继教程,但所有关于实现JWT令牌的教程都是针对Angular或React编写的,当涉及到客户端网站时。
任何帮助将不胜感激。
谢谢!
首先必须创建JWT令牌:在你的面前
const token=jwt.sign({
userId: user._id
},config.secret, {expiresIn: '24h'});
res.json({success:true,message:'Success', token:token, user: {username:user.username}});
然后遵守前面保存到localStorage
这将产生你可以在实现唯一键的标题
之后在你的路线当你想检查是否有一个JWT的头只是做:
router.use((req,res,next)=>{
const token=req.headers['authorization'];
if(!token){
res.json({success:false, message:"No token provided"});
}
else{
jwt.verify(token, config.secret, (err,decoded)=>{
if(err){
res.json({success:false,message:"Token invalid: " + err});
}
else{
req.decoded=decoded;
next();
}
});
}
});
这是一个中间件,将检查是否有在“授权”标头中的JWT关键
注意这一个后未来每路线要运行这个中间件。
Here你会找到有关JSON网络令牌
编辑
每一个细节这里是你如何能与AJAX要求做到:
$("submit").click(function(){
$.ajax({
url : 'api/login,',
type : 'POST',
data : {login: $('#login').val(),password:$('#password').val()}
dataType : 'JSON',
success : function(data, statut){
localStorage.setItem('token',data.token) // assuming you send a json token
},
error : function(resultat, statut, erreur){
// whatever code you want
},
complete : function(resultat, statut){
}
});
});
感谢您的回复Azoulay。正如我在文章中提到的,我已经实现了处理auth逻辑的控制器,路由等。任务是在客户端网站上保存并提供令牌。 –
要在您的客户端实现jwt令牌,您必须像我提到的那样使用本地存储。你抓取来自后面的数据,然后使用localStorage.setItem('token',data)将它归入本地存储; 你应该看看我发布的关于本地存储的链接。那么如果这个答案对你有帮助,你可以请upvote并将其设置为已解决?谢谢 –
嗨Azoulay,不幸的是,它不完全回答我的问题。我知道这个理论,但我不知道如何实现它。我有一个http://本地主机:3000/API /登录页面,当我输入我的用户名和密码,并提交表单,控制器将数据传递到API端点,它返回的JSON {“令牌”:“布拉布拉”} 。如何检索此数据以将其保存到本地存储? –
有一个存储令牌的对象,如果要在用户离开后保留令牌,以便只要令牌有效就保持连接,则可以将其保存在localStorage中。
在客户端执行AJAX请求时,从localStorage的对象中检索令牌并在授权标头中设置令牌。
嗨罗马。你能用你处理的客户端代码更新你的问题: 1。用户登录 2.用户身份验证(针对需要身份验证才能访问内容的页面)。 但是,总的来说,你会想用'localStorage',其中有一个'setItem'方法来存储数据在本地(在这种情况下,令牌),以及'getItem'方法检索数据。那么这只是正确使用令牌的问题。 – Jaxx