如何在Node.js应用程序中处理客户端网站上的JWT令牌?

我正在实施JWT令牌进行身份validation。

我没有使用像Angular或React这样的客户端站点框架。 这只是EJS。

第1步。我开发了一个API,在成功login时返回令牌,如下图所示(我使用Postman来testingAPI):

API响应与JSON

第2步。然后,我访问受限制的路由并传递带有令牌值的授权标头,通过在邮递员中手动input它,它工作得很好。

我的问题是WHERE和如何保存从客户端上的第1步返回的令牌,以便它在第2步中的标头中发送。

我是Web开发的新手,并遵循教程,但是我发现有关实现JWT令牌的所有教程都是针对Angular或React编写的,当涉及到客户端网站时。

任何帮助将不胜感激。

谢谢!

首先,您必须使用JWT创build令牌:

 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键

请注意,在这之后的每条路线都将运行这个中间件。

这里您可以find有关JSON Web Tokens的每个细节

编辑

以下是如何处理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){ } }); }); 

有一个存储令牌的对象,如果你想在用户离开之后保留令牌,只要令牌有效就保持连接,你可以把它保存在localStorage中。

在客户端进行AJAX请求时,从localStorage的对象中检索令牌,并在Authorization头中设置令牌。