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

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

问题描述:

我正在实施用于身份验证的JWT令牌。如何在Node.js应用程序中处理客户端网站上的JWT令牌?

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

步骤1.我有一个API开发了对成功登录返回令牌上下面(我使用邮差用于测试API)的图片,如下所示:

API response with JSON

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

我的问题是在哪里和如何保存返回的标记从客户端上的第1步,使其在头发送的第2步

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

任何帮助将不胜感激。

谢谢!

+0

嗨罗马。你能用你处理的客户端代码更新你的问题: 1。用户登录 2.用户身份验证(针对需要身份验证才能访问内容的页面)。 但是,总的来说,你会想用'localStorage',其中有一个'setItem'方法来存储数据在本地(在这种情况下,令牌),以及'getItem'方法检索数据。那么这只是正确使用令牌的问题。 – Jaxx

首先必须创建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){ 

     } 

    }); 

}); 
+0

感谢您的回复Azoulay。正如我在文章中提到的,我已经实现了处理auth逻辑的控制器,路由等。任务是在客户端网站上保存并提供令牌。 –

+0

要在您的客户端实现jwt令牌,您必须像我提到的那样使用本地存储。你抓取来自后面的数据,然后使用localStorage.setItem('token',data)将它归入本地存储; 你应该看看我发布的关于本地存储的链接。那么如果这个答案对你有帮助,你可以请upvote并将其设置为已解决?谢谢 –

+0

嗨Azoulay,不幸的是,它不完全回答我的问题。我知道这个理论,但我不知道如何实现它。我有一个http://本地主机:3000/API /登录页面,当我输入我的用户名和密码,并提交表单,控制器将数据传递到API端点,它返回的JSON {“令牌”:“布拉布拉”} 。如何检索此数据以将其保存到本地存储? –

有一个存储令牌的对象,如果要在用户离开后保留令牌,以便只要令牌有效就保持连接,则可以将其保存在localStorage中。

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