express-jwt的任何完整示例?

时间:2017-09-22 11:54:39

标签: node.js express express-jwt

我想在我的快递节点应用程序中使用express-jwt,但我找不到任何证明登录部分的示例。

请帮忙吗?

2 个答案:

答案 0 :(得分:2)

我建议您尝试了解JWT的原理以及它们如何在服务器和客户端之间传递以及如何在服务器端与秘密进行匹配-这是doc

enter image description here

有效载荷可以是任何用户数据-即:仅是用户名或ID

基本上,您需要一种服务,该服务在成功身份验证时会生成令牌(当用户使用适当的凭据登录时,即eE:usr&pwd),并创建一个带有令牌的附加标头,以用于对服务器的进一步请求。

对于express-jwt,您显然需要安装以下软件包(与jsonwebtoken相同):

npm install jwt-express --save

然后将其初始化为:

var jwt = require('jwt-express');
app.use(jwt.init('secret'));

来自文档:

  

jwt.init()函数返回Express的中间件函数,因此   必须在app.use()中调用它。它将自动读取   来自Cookie或授权标头的JWT(由   您),并将JWT对象添加到请求对象(req)。它也会   将jwt()方法添加到Response对象(res)以创建/存储   智威汤逊。必须在其他jwt方法之前调用jwt.init()。

这些是您的选择:

  • cookie :(字符串)cookie的名称(默认值:'jwt-express')
  • cookieOptions :(对象)存储cookie时要使用的选项(默认值:{httpOnly:true})
  • cookies :(布尔值)如果为true,则将使用cookie,否则将使用Authorization标头(默认值:true)
  • refresh :(布尔值)指示是否应刷新JWT并存储每个请求(默认值:true)
  • reqProperty :(字符串)要填充的req的属性(默认值:“ jwt”)
  • revoke :(函数)jwt.revoke()将调用此函数(默认:function(jwt){})
  • signOptions :(对象)对JWT签名时使用的选项(默认值:{})
  • stales :(数字)jwt失效的毫秒数(默认值:900000(15分钟))
  • verify :(功能)附加验证。必须返回一个布尔值(默认值:function(jwt){return true})
  • verifyOptions :(对象)验证JWT时要使用的选项(默认值:{})

其余的逻辑由您决定,但是我的示例应为您提供一个如何在应用程序中管理jwt的思路。

这是我如何通过jsonwebtoken实现jwt的示例:

 // INFO: Function to create headers, add token, to be used in HTTP requests
  createAuthenticationHeaders() {
    this.loadToken(); // INFO: Get token so it can be attached to headers
    // INFO: Headers configuration options
    this.options = new RequestOptions({
      headers: new Headers({
        'Content-Type': 'application/json', // INFO: Format set to JSON
        'authorization': this.authToken // INFO: Attach token
      })
    });
  }

  // INFO: Function to get token from client local storage
  loadToken() {
    this.authToken = localStorage.getItem('token');; // Get token and asssign to 
variable to be used elsewhere
  }

和一些存储用户状态的功能,即:

 // INFO: Function to store user's data in client local storage
 storeUserData(token, user) {
   localStorage.setItem('token', token); // INFO: Set token in local storage
   localStorage.setItem('user', JSON.stringify(user)); // INFO: Set user in local 
  storage as string
      this.authToken = token; // INFO: Assign token to be used elsewhere
      this.user = user; // INFO: Set user to be used elsewhere
    }

和注销功能以销毁本地存储中的令牌,即:

 // INFO: Function for logging out
 logout() {
this.authToken = null; // INFO: Set token to null
   this.user = null; // INFO: Set user to null
   localStorage.clear(); // INFO: Clear local storage
 }

如果您使用npm的jsonwebtoken,则可以在生成令牌时设置令牌的ttl:

const token = jwt.sign({ id: idDB }, "secret", { expiresIn: '24h' }); 

或您想要的任何ttl,字符串“ secret”是指与服务器匹配的秘密。

答案 1 :(得分:1)

这是被问到的,只是在这里答复是否可以帮助来这里搜索的人-可以在

中找到express-jwt的好例子

https://hptechblogs.com/using-json-web-token-for-authentication/

并且我还尝试了一些类似的实现,该实现可以在-

中找到

https://github.com/Abhay-Joshi-Git/jwt-node-react/blob/master/server/index.js

相关问题