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获取用户信息
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- (基础)golang+jwt实现用户登录获取token 1.根据用户名/密码获取token ServiceJWT...
- (进阶)golang+gin+jwt实现用户登录获取token 1.获取tokenPOST请求参数{ "na...
- 接口需求:用户登录成功后,返回Django REST framework 的JWT Token, Token不存储...
- 本文源码:Gitee·点这里 前言 本篇主要讲述 Spring Security 如何结合 JWT ,实现无状态下...
- 客户的数据登录信息一般保存在 标签中,我们只要监听其submit事件,根据服务器返回的数据做出响应并渲染给客户就可...