node-express | 实现登录验证和授权
发布于 3 个月前 作者 WenNingZhang 1659 次浏览 来自 分享

账号登录验证和权限设置,可以说是任何一个系统都必须具备的基本功能,而方式是从最传统的账号密码登录,到社交账号绑定不等。

1、登录验证(Authentication)

先要考虑登录有什么用?

最基本的目的是为了让系统在很多人中认得你,你上次来干什么了,做到哪一步了,一句话概括是:记得之前的你。

另外的目的是为了不让其他人冒充你。概括为:确保真的是你。

以上两个目的的实现需要两个中间件处理。

会话(session) —> 记得之前的你

Passport —> 确保真的是你

2、授权(Authorization)

登录验证是为了验证你的身份,有机会进入系统的大门。而授权是为了确定做的操作,都是被允许的,你有被赋予权限。系统需要知道你是普通用户,还是论坛坛主,又或者是整个系统的管理员。

Authorization

运行部署:

1、数据库用户名、密码、数据库名都是test,clone下来后要先建立一个数据库,或者修改连接数据库。

2、npm install //安装依赖

3、npm start //启动项目

4 回复

楼主我还是不理解serializeUser和deserializeUser是干嘛用的,是为了不要明文传输吗?我看了你的for serializeUser和for deserializeUser还是一头雾水,你能用通俗的一句话说下嘛,这是我写的demo。不过是当成黑魔法的。。。QQ截图20180115090109.png

@memedahui 你好,谢谢你给的建议,我先解释一下问题哈 1、开始用户登录成功后,接下来的请求,服务器需要确定都是这个用户的操作。 因此引入cookie机制,但是如果用户信息巨大,可能会影响网络传输, 又一次引入session,session机制可以把用户信息保存到服务器(或者数据库,我的代码中是保存了数据库)。 这时又出现一个问题,如何确定每个cookie和服务端的用户相对应。 因此需要在cookie中设置一个标识符,目的是用此标识符在服务端查询该用户信息,保存住。

passport.serializeUser做就是用户登录后,保存数据库的操作, 向你说的done(null, user)是保存的整个用户,如果done(null, user['_id'])会保存用户Id,

passport.deserializeUser是根据cookie保存的标识符,查询保存的session的数据库,从而获取用户信息,因为上面你是把整个用户保存到数据库,因此done(null, user)会返回整个用户信息。

2、其实我也是一个博客小白,写技术博客时间不长,文章没表述清楚,今晚我再改改。 您发google链接我也确实借鉴过,以后我会加上链接地址哈

回到顶部