在使用express要完成一个登录功能,简单使用了中间件cookie-parser。
1. 下载cookie-parser
npm i cookie-parser
2.在 app.js 中引用cookie-parser
const cookieParser = require('cookie-parser')
//不使用签名
app.use(cookieParser())
//若需要使用签名,需要指定一个secret 加密 Cookie
app.use(cookieParser('123456'))
//上面两种折一即可
3.在登录的路由中进行设置,如果登录成功,我们就将用户名存在Cookie中:
//findByNP是我自己为User模式封装的一个方法,其作用就是通过用户名和密码来查找用户,如果找到了就返回用户的信息
User.findByNP(obj,function(err,data){
//如果登录成功,我们就设置Cookie
if(data){
//设置cookie ,其中maxAge是为cookie设置一个生命周期60000000ms后会失效,即需要重新登录
res.cookie("user",req.body.username, {maxAge: 60000000 , httpOnly: false,signed:true});
res.redirect('/')
}else{
return res.status(500).send('Server error.')
}
})
4.当上述的方法执行成功后,我们就可以在浏览器的控制台中找到相关的cookie信息。
5.如果我们需要登录后才能访问除login.html之外的所有页面,那么我们可以在app.js中的路由代码之前添加以下代码:
// 检测是否登录
app.use(function(req, res, next) {
var url = req.url;
// 判断不拦截的路由 出/login和/之外的都拦截
if (url != '/login' && !req.signedCookies.user && url != '/') {
res.redirect('/login')
return
}
//如果登录过,我们就执行下一个中间件
next();
});
6.退出登录时,清除cookie
router.get('/logout', function (req,res,next){
//删除Cookie
res.clearCookie('user')
//回到/login路由
res.redirect('/login');
})