第十四课时: 登录/登出以及JWT认证

12次阅读

共计 1218 个字符,预计需要花费 4 分钟才能阅读完成。

1. 后端代码概览
// /login 登录接口
router.post(‘/login’, function(req, res, next) {
const {userName, password} = req.body
if (userName) {
const userInfo = password ? getPasswordByName(userName) : ”
if (!userInfo || !pawwsord || userInfo.password !== password) {
res.status(401).send({
code: 401,
mes: ‘user name or password is wrong’,
data: {}
})
} else {
res.send({
code: 200,
mes: ‘success’,
data: {
token: jwt.sign({name: userName}, ‘abcd’, {
expiresIn: 60
})
}
})
}
} else {
res.status(401).send({
code: 401,
mes: ‘user name is empty’,
data: {}
})
}
})

// 接口拦截
const whiteListUrl = {
get: {},
post: {
‘/index/login’
}
}

const hasOneOf = {str, arr} => {
return arr.some(item => item.includes(str))
}

app.all(‘*’, (req, res, next) => {
let method = req.method.tolowerCase()
let path = req.path
if (whiteListUrl[method] && hasOneOf(path, whiteListUrl[methods])).next()
else {
const token = req.headers.authorization
if (!token) res.status(401).send(‘there is no token, please login’)
else {
jwt.verify(token, ‘abcd’, (error, decode) => {
if (error) res.send({
code: 401,
mes: ‘token error’,
data: {}
}) else {
req.userName = decode.name
next()
}
})
}
}
})
2. 登录以及 Token 处理
(1)路由守卫判断有没有 token, 没有的话进入 login 页 (2) 如果有的话, 重新请求服务器获取 token, 放入 cookies, 进入页面 (3)login 登录成功后, 返回 token 放入 cookies(4) 每次请求的时候 headers 里加入 token 验证
3.Token 过期处理
后端代码:
token: jwt.sign({name: userName}, ‘abcd’, {
expiresIn: 60
})
token 设置为 60 秒过期, 每次请求
4. 退出登录
跳转页面, 清除 token

正文完
 0