带有Devise的JSON Web令牌

Nom*_*man 10 ruby rack ruby-on-rails devise jwt

我希望这不算是一个固执己见的问题.我只需指向正确的方向.

我正在修改Devise宝石纯粹用JSON.我有没有问题与registration,confirmation,re-confirmation,locking到目前为止.

但是,在使用登录时,我深入挖掘并了解默认Devise登录策略使用Warden与会话和Rack身份验证相关的操作.

我理解JWT其中包含所有信息,不需要会话.

因此,如果我删除Devise所有内容的默认策略并简单地返回JWT成功和错误错误,那么这是正确的方法吗?

我错过了什么吗?

Wai*_*... 10

为了使用JWT设计,我建议不要使用其他人可以审核和测试的工具.

出于这个原因,我开发了devise-jwt.它执行零猴子修补并利用warden,这是下面的设计认证库.您还可以在我写的这篇文章中阅读更多相关内容:机架和Rails的安全JWT身份验证实现

希望能帮助到你


jan*_*szm 6

我不会使用,devise_token_auth因为它似乎太麻烦了......你在db:/中存储令牌.如果JWT可用,我们为什么要这样做?

我宁愿为Warden/Devise夫妇添加一个新策略,让他们按照自己的意愿行事.

这是一个例子:https://medium.com/@goncalvesjoao/rails-devise-jwt-and-the-forgotten-warden-67cfcf8a0b73.有一点需要注意:JWTWrapper并不属于app/helpers/.JWTWrapper.encode({ user_id: current_user.id })一旦您的用户使用他们的电子邮件/密码成功登录,您需要注入一个电话.也许在Devise SessionsController中?

def create
  self.resource = warden.authenticate!(auth_options)
  sign_in(resource_name, resource)
  yield resource if block_given?
  render json: JWTWrapper.encode({user_id:current_user.id})
end
Run Code Online (Sandbox Code Playgroud)

您可能只想对xhr或json(格式)请求执行此操作


Sac*_*per 3

您可能不应该破解您的 Devise gem 源。我建议只使用Devise Token Auth gem 来处理令牌。

https://github.com/lynndylanhurley/devise_token_auth

它将生成并验证有效的RFC 6750 Bearer Tokens

根据他们的自述文件。

  • 与 angular.js 的古老 ng-token-auth 模块和 jQuery 的出色 jToker 插件无缝集成。
  • 使用 OmniAuth 进行 Oauth2 身份验证。
  • 使用 Devise 进行电子邮件身份验证,包括:
    • 用户注册
    • 重设密码
    • 帐户更新
    • 帐户删除
  • 支持多种用户模型。
  • 这是安全的

  • 很多人都向我指出了这颗宝石,但这并不能回答我的问题。纯粹的“JWT”实现需要与“Warden”和“Sessions”有任何关系吗? (3认同)