// /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() } }) } } })
(1)路由守卫判断有没有token,没有的话进入login页
(2)若是有的话,从新请求服务器获取token,放入cookies,进入页面
(3)login登陆成功后,返回token放入cookies
(4)每次请求的时候headers里加入token验证后端
后端代码:服务器
token: jwt.sign({ name: userName }, 'abcd', { expiresIn: 60 })
token设置为60秒过时,每次请求cookie
跳转页面,清除tokenapp