美文网首页
node.js使用JWT登录

node.js使用JWT登录

作者: Poppy11 | 来源:发表于2020-09-01 11:59 被阅读0次

一、什么是JWT

JWT全称是jsonwebtoken,JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源

二、JWT的构成

第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).

image.png

三、如何应用

如何应用
一般是在请求头里加入Authorization,并加上Bearer标注:

fetch('api/user/1', {
  headers: {
    'Authorization': 'Bearer ' + token
  }
})

服务端会验证token,如果验证通过就会返回相应的资源。整个流程就是这样的:


image.png

在Node.js中应用

一、首先下载依赖

npm i jsonwebtoken --save

二、引入jsonwebtoken

const jsonwebtoken = require("jsonwebtoken")

三、登录并使用JWT签名并返回token

  async login(ctx) {
        ctx.verifyParams({
            username: {type: 'string', required: false},
            password: {type: 'string', required: false}
        })
        const {username} = ctx.request.body
        const user = await User.findOne({username})
        if(!user){
            ctx.throw(401,"账号或者密码错误")
        }else{
            const {_id,username} = user
            const token = jsonwebtoken.sign({_id,username},secret,{expiresIn:'1d'})
            ctx.body = {token}
        }
    }

四、写一个中间件,这个中间件用来验证token和密钥是否正确,最后引入在路由中

const auth = async (ctx,next) => {
    const {token = ''} = ctx.request.header
    const tk = token.replace('Bearer ',"")
    try {
        const user = jsonwebtoken.verify(tk,secret)
        ctx.state.user = user
    }catch (e) {
        ctx.throw(401,'没有权限')
    }
    await next()
}

router.patch('/',auth,update)

相关文章

  • node.js使用JWT登录

    一、什么是JWT JWT全称是jsonwebtoken,JWT的声明一般被用来在身份提供者和服务提供者间传递被认证...

  • Json web token

    用户登录后的凭证大多都用JWT(Json Web Token)下面用Node.js实现签名和验签。 生成pem 类...

  • NODE.JS JWT 登录示例

    简单的示例-之后可能会用到 token 一般通过头部信息传递

  • JWT用户登录机制

    最近使用gin框架开发程序,其中后台管理员登录使用jwt机制。具体jwt是啥,本文章不想搬运其他文章内容,各位自行...

  • 17 Go 鉴权(三):JWT

    Go 使用JWT鉴权 一、实现思路: 实现一个基于jwt-go包的JWT编解码工具 实现一个HTTP服务器编写登录...

  • JWT网关,基于kong

    说明 实现了Jwt拦截,登录时调用第三方登录接口。登录后会生成JWT-token,把返回的jwt-token放入h...

  • Spring Security 使用JWT维护用户信息,jwt替

    使用form表单登录使用JWT维护用户状态项目源码:https://github.com/dk980241/spr...

  • Django 前后端分离 JWT 登录

    Django REST framework JWT 和登录功能实现前后分离token的方式做登录身份校验,jwt校...

  • NestJS JWT 实现用户认证

    功能说明:client端使用用户名和用户密码登录,登录成功后server端发送JWT;client在header中...

  • SpringBootSecurity学习(13)前后端分离版之J

    JWT 使用 前面简单介绍了把默认的页面登录改为前后端分离的接口异步登录的方法,可以帮我们实现基本的前后端分离登录...

网友评论

      本文标题:node.js使用JWT登录

      本文链接:https://www.haomeiwen.com/subject/innmsktx.html