【发布时间】:2020-03-19 04:44:04
【问题描述】:
使用新生成的 FeathersJS 应用程序(本地身份验证),我正在执行以下 REST api 调用:
- GET /users - 未授权失败
- POST /authentication with username and password - 成功
- GET /users - 成功并返回用户列表
- DELETE /authentication - 返回 auth 对象,没有错误消息 (并在服务器端生成注销事件)
- GET /users - 成功并返回用户列表
我的预期结果是,在第 5 步我会收到未授权错误,因为 JWT 令牌在服务器端注销后会过期。
我做错了什么?如何仅使用 REST api 正确注销用户,因此令牌将失效?还是身份验证只能与 FeathersJS 客户端库一起使用?
附言我正在尝试将 FeathersJS 作为我的 Flutter 应用程序的后端 REST API 的潜在解决方案。因此,我只对 FeathersJS 的服务器端实现感兴趣。
【问题讨论】:
-
Feathers auth 不是基于会话的东西,它使用客户端令牌。存在调用 DELETE /authentication 以便您可以在自己的代码中采取措施来实现服务器端注销(例如,将当前令牌列入黑名单),但它不是内置的。如果客户端仍然拥有身份验证令牌,那么它将继续工作直到其到期(嵌入在 JWT 中)
-
我并不是说它是基于会话的东西。根据我使用 express.js 后端的经验,JWT 令牌在注销时在服务器端失效
-
Feathers 不会自动执行此操作。删除钩子在那里,因此您可以连接自己的逻辑来处理已发布令牌的服务器端失效/跟踪,但这不是内置功能。
-
也许你能指出描述如何使用钩子删除或使令牌无效的文档或示例?我找不到任何可以描述使用令牌服务器端进行操作的内容
-
没有内置任何东西。您将在身份验证服务的
remove方法上创建一个after挂钩,并对那里的令牌采取行动(应该在params.authentication.payloadIIRC 中)
标签: rest feathersjs feathers-authentication