Nodejs__代码__认证__session与jwt认证机制

本文详细介绍了如何使用jsonwebtoken和express-jwt在Node.jsExpress应用中实现JWT认证,包括登录接口、生成Token、验证Token以及错误处理。还提到session认证部分的内容暂未更新。
摘要由CSDN通过智能技术生成

jwt认证

代码思路 :

  1. 客户端 —— 提交账号密码
  2. 服务端 —— 验证账号密码
  3. 密码通过 —— 用户信息加密为Token
  4. 客户端 —— Token存储到本地
  5. 客户端 —— 再次请求
  6. 请求头 —— Token发送到服务端
  7. 服务端 ——  解密Token还原用户信息
  8. 身份证成功 !
  9. 服务端 —— 用户对应的页面内容响应到浏览器  

代码准备 :

api测试工具(例如:Apifox)

jwt替换包

  1. express-jwt

  2. express-unless

  3. async

  4. lodash.set

代码示例 :

/*
    jsonwebtoken : 作用生成JWT字符串(在服务器中将用户的信息转成JWT字符串)
    express-jwt  : 将JWT字符串解析还原成JSON对象(从客户端保留的JWT加密字段 使用此包将用户的信息还原成真正的用户信息)
*/
const express = require('express')
const app = express()
const jwt = require('jsonwebtoken')         // 生成JWT
const express_jwt = require('express-jwt')  // 解析JWT
const cors = require('cors')
app.use(cors())
// 解析post表单数据的中间件 
const body_parser = require('body-parser')
app.use(body_parser.urlencoded({ extended: false }))
// 自定义加密 
const secret_key = 'Lock Jwt =.='

app.use(express_jwt({ secret: secret_key }).unless({ path: [/^\/api\//] }))
// API:登录界面 
app.post('/api/login', function (req, res) {
    const user = req.body
    // 自定义 用户名和密码
    const my_name = 'admin'
    const my_password = '123456'
    if (user.username === my_name && user.password === my_password) {
        // jwt.sign  生成 JWT字符串 / expiresIn 有效期60秒 
        const token_str = jwt.sign({ username: user.username }, secret_key, { expiresIn: '60s' })
        return res.send({
            status: 200,
            message: 'Loging Success !',
            token: token_str
        })
    } else {
        return res.send({
            status: 400,
            message: 'Loging Fail !'
        })
    }
})
// API:Token测试  
app.get('/admin/getinfo', function (req, res) {
    // req.user 获取用户信息 
    res.send({
        status: 200,
        message: 'Get user information success !',
        data: req.user
    })
})
// 使用全局错误处理中间件,捕获解析JWT失败后产生的错误 
app.use((err, req, res, next) => {
    console.log(res.data)
    if (err.name === 'UnauthorizedError') {
        return res.send({
            status: 401,
            message: 'Invalid Token: ' + err.message,
        })
    }
    res.send({
        status: 500,
        message: "I don't know this error,so your have to solution to this problem at url:https://www.baidu.com/"
    })
})
// 运行 
app.listen(80, () => {
    console.log('Title:Jwt Test\nHost:http://127.0.0.1\nPort:80')
});

代码运行 :

 1.开启服务

2.输入用户名和密码

3.输入Token进行认证

提示 :Bearer+空格+Token字符串

session认证

 待更新...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vip飞梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值