passport.js本地策略 - 使用用户名登录,使用令牌验证以后的请求

nfl*_*cco 0 node.js passport.js

我使用本地策略遇到了passport.js的问题.我有两个具体问题:

  1. 对于最基本的案例,我没有获得持久化会话来使用示例代码(见下文).
  2. 我想要无会话.对于最基本的情况,在登录时,我将传递一个用户名+密码,为我提供会话令牌,在常规请求中我将使用此会话令牌哈希与其他一些东西进行身份验证.这很容易用护照吗?看起来护照在这种情况下提供的并不多,而且制作我自己的解决方案更容易 - 只需使用标准检查登录/注销,然后使用中间件取消请求令牌以验证请求.容易吃?

问题1:

使用库中的参考代码:

https://github.com/jaredhanson/passport-local/blob/master/examples/login/app.js

我做了一系列命令来显示已登出和已登录:

A.支票/账户,未登录

curl -v localhost:3000/account
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我得到了一个重定向到/ login

<p>Moved Temporarily. Redirecting to <a href="http://localhost:9292/login">http://localhost:3000/login</a></p>
Run Code Online (Sandbox Code Playgroud)

B.登录

curl -v -d "username=bob&password=secret" http://127.0.0.1:3000/login
Run Code Online (Sandbox Code Playgroud)

也如预期的那样,我得到一个重定向到/

<p>Moved Temporarily. Redirecting to <a href="http://127.0.0.1:3000/">http://127.0.0.1:3000/</a></p>
Run Code Online (Sandbox Code Playgroud)

C.检查/帐户,登录

curl -v localhost:3000/account
Run Code Online (Sandbox Code Playgroud)

我勒个去???

<p>Moved Temporarily. Redirecting to <a href="http://localhost:9292/login">http://localhost:3000/login</a></p>
Run Code Online (Sandbox Code Playgroud)

Jar*_*son 6

对于1,会话支持要求在服务器端配置cookie并由用户代理使用.通常,这是一个浏览器,它将在每个请求中传输cookie,服务器使用它们来恢复您的登录状态.

但是,您使用的curl命令不会传输cookie,因此每个请求对服务器看起来都是"新的",这就是您每次都看到重定向登录的原因.我怀疑如果你在浏览器中尝试相同的请求,这将按预期工作.

至于2,我需要更多细节来建议一个好的解决方案.如果您使用HTML和Web浏览器访问您的网站,您最终将需要像会话这样的东西.您可以每次在查询参数中传输此信息,而不是cookie,但您最终将重建很多Express/Connect提供的开箱即用信息.

在任何情况下,如果您选择沿着该路线前进,Passport会提供一个干净的界面来实现您自己的身份验证策略.您只需要解析相关凭据的请求并在数据库中查找用户.

API客户端是不同的,我建议看看Passport的OAuth支持,它提供了验证与特定客户端关联的访问令牌的简便方法.