账号登录验证和权限设置,可以说是任何一个系统都必须具备的基本功能,而方式是从最传统的账号密码登录,到社交账号绑定不等。
1、登录验证(Authentication)
先要考虑登录有什么用?
最基本的目的是为了让系统在很多人中认得你,你上次来干什么了,做到哪一步了,一句话概括是:记得之前的你。
另外的目的是为了不让其他人冒充你。概括为:确保真的是你。
以上两个目的的实现需要两个中间件处理。
2、授权(Authorization)
登录验证是为了验证你的身份,有机会进入系统的大门。而授权是为了确定做的操作,都是被允许的,你有被赋予权限。系统需要知道你是普通用户,还是论坛坛主,又或者是整个系统的管理员。
运行部署:
1、数据库用户名、密码、数据库名都是test
,clone下来后要先建立一个数据库,或者修改连接数据库。
2、npm install //安装依赖
3、npm start //启动项目
哦
楼主我还是不理解serializeUser和deserializeUser是干嘛用的,是为了不要明文传输吗?我看了你的for serializeUser和for deserializeUser还是一头雾水,你能用通俗的一句话说下嘛,这是我写的demo。不过是当成黑魔法的。。。
@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链接我也确实借鉴过,以后我会加上链接地址哈