JWT(JSON Web Tokens)用nodeJS实现用户登录以及基于token获取用户信息

const express = require('express')

const app = express()

// 用于将用户的信息生成jwt字符串
const jwt = require('jsonwebtoken')
// 用于jwt字符串解析成用户信息
const expressJWT = require('express-jwt')

//允许跨域
const cors = require('cors')
app.use(cors())

// 解析post表单数据的中间件
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))

// 定义secret密钥
const secretKey = 'itheima No1 jwz'

// 将jwt字符串解析还原成json对象的中间件
app.use(expressJWT.expressjwt({ secret: secretKey, algorithms: ['HS256'] }).unless({ path: [/^\/api\//] }))

// 登录接口
app.post('/api/login', (req, res) => {
    const userinfo = req.body
    // 登陆失败
    if (userinfo.username !== 'admin' || userinfo.password !== '000000') {
        return res.send({
            status: 400,
            message: '登录失败!'
        })
    }
    // 登录成功
    const tokenStr = jwt.sign({ username: userinfo.username }, secretKey, { expiresIn: '30s' }) //三个参数 用户的信息对象,加密的密钥,配置对象,可以配置有效期
    res.send({
        status: 200,
        message: '登陆成功',
        token: "Bearer " + tokenStr,
    })
})

app.get('/admin/getinfo', (req, res) => {
    console.log(req.auth);
    res.send({
        status: 200,
        message: '获取用户信息成功!',
        // 视频中是req.user 改成auth可以实现
        data: req.auth,
    })
})

// 声明全局错误处理中间件,捕获jwt失败后产生的错误
app.use((err, req, res, next) => {
    // 这次错误由于token解析失败导致的
    if (err.name === 'UnauthorizedError') {
        return res.send({
            status: 401,
            message: '无效的token'
        })
    }
    res.send({
        status: 400,
        message: '未知的错误!'
    })
})

app.listen(80, () => {
    console.log('80已开启');
})
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容