Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了node.js – http谓词上的Mongoose / Express授权大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_675_4@ 我有一个在mongoose和express上运行的node.js REST服务.我也使用merse来设置我的路由.

我现在想要实现的是以下类型的sceanrios:

Scenario I: e.g. blogpost
- GET -> no authentication required
- POST/PUT/deletE -> authentication required

Scenario II: e.g. user
- GET -> authentication required
- POST/PUT/deletE -> authentication required plus username of logged in user has to match

我已经看过everyauth和mongoose-auth了,但找不到能给我这种控制的东西.

解决方法

忘记每一个人.这个图书馆是一个矫枉过正,imho.实际上实现身份验证非常简单,请遵循以下模式:

>用户用户名和密码传递给服务器;
>服务器获取用户名和密码,并在数据库中检查是否有用户使用该密码.如果没有用户,只需回复错误;
>我们有一个用户,现在使用Express的内置会话机制.调用req.session.regenerate并在回调中执行req.session.userID = user.id. Express会自动将cookie发送给用户;
>创建一个中间件(必须在任何其他请求处理程序之前触发),它基本上在数据库搜索req.session.userID.如果找到一个,则将其存储在req中,即req.user = user;
>在视图中,您只需检查是否设置了req.user变量.如果是,那么我们通过身份验证.而且你已经完成了!

ad 1 2)为了使身份验证安全,您应该使用一些加密(和/或httpS).例如,密码应该在DB中分为两部分:salt和hash. salt是随机生成的(在注册时)和hash = hash_it(pwd,salt),其中hash_it是一些散列算法(例如:MD5或SHA256).

现在,可以通过几个步骤进行客户端身份验证(仅当您可以使用JavaScript时):

>服务器随机地将new_salt发送到@L_772_31@页面(或者在JavaScript中生成一个,不需要隐藏生成算法);
>用户发送AJAX请求给我用户X的盐,服务器用存储在DB中的盐响应(盐是公共的);
>在使用salt的响应哈希pwd然后使用New_salt再次哈希结果时,将其存储在变量hpwd中;
>客户端将username,hpwd和new_salt发送到服务器;
>服务器从DB获取用户名密码,哈希pwd用new_salt,并将结果与​​hpwd进行比较(注意:你不存储new_salt).

这种方法很不错,因为每次@L_772_31@时(从外部角度来看)数据流都是通过网络进行的,即使用户名和密码相同也是如此.

这很重要,因为密码泄漏是一件严肃的事情.不是因为有人可以破坏你的应用程序的帐户(这是一个轻微的损害,除非你是一家银行 – 但是你不会问这样的问题:D).主要是因为人们倾向于为多个站点使用相同的密码,包括银行帐户.

大佬总结

以上是大佬教程为你收集整理的node.js – http谓词上的Mongoose / Express授权全部内容,希望文章能够帮你解决node.js – http谓词上的Mongoose / Express授权所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。