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已开启');
})
JWT(JSON Web Tokens)用nodeJS实现用户登录以及基于token获取用户信息
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 接口需求:用户登录成功后,返回Django REST framework 的JWT Token, Token不存储...
- 本文源码:Gitee·点这里 前言 本篇主要讲述 Spring Security 如何结合 JWT ,实现无状态下...
- 客户的数据登录信息一般保存在 标签中,我们只要监听其submit事件,根据服务器返回的数据做出响应并渲染给客户就可...
- 前言:当今前后端分离[https://so.csdn.net/so/search?q=%E5%89%8D%E5%9...
- Vue项目中实现用户登录及token验证 夏日晚餐关注 22019.11.29 17:43:02字数 710阅读 ...