最近的项目使用express来写,这也是我尝试写的第一个nodejs的大型项目。今天实现了半天的登陆逻辑,还是很费劲的,在此记录一下。
大部分的知识都是从https://github.com/cnodejs/nodeclub 这份源码学到的,还有express官方的一个登陆验证示例
https://github.com/visionmedia/express/blob/master/examples/auth/app.js
当然还有api http://expressjs.jser.us/api.html#res.status 但是吐槽一下,express的api。。真心崎岖。。
首先最坑的一点。。。让session生效
app.use(express.cookieParser());//开启cookie app.use(express.session({ //开启session secret: config.session_secret })); app.use(app.router);
那么注意了,前两行一定要写在app.router这个中间件前面!否则session始终未定义!
之后我们开始书写session与cookie配合的逻辑。
基本逻辑:
- 进入网站后(此时没有session),从cookie中取加密的数据,进行验证,若验证成功,在session中存储user,用户免登陆。
- 进入首页时(需要登录的页面),若session中没有user,则自动跳到登陆页面。
- 登陆时,采用post方式提交用户信息,利用加密算法进行加密,存储登录信息到cookie中。
- 数据库采用的mysql,采用啥都无所谓。。因为我是通过http与后端写好的统一登陆接口进行通信的。登陆成功返回0,失败返回-9999
ok,下面来一条条的实现这些逻辑。
首先我们利用crypto这个牛逼的加密加密库进行加密解密操作
var crypto = require('crypto'); //加密 function encrypt(str, secret) { var cipher = crypto.createCipher('aes192', secret); var enc = cipher.update(str, 'utf8', 'hex'); enc += cipher.final('hex'); return enc; } //解密 function decrypt(str, secret) { var decipher = crypto.createDecipher('aes192', secret); var dec = decipher.update(str, 'hex'