问题标签 [devise-jwt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
135 浏览

ruby-on-rails - 从 ApplicationCable 访问 env['warden'].user 为 nil

所以我试图dervise-jwt在 Rails 5.2 应用程序中实现。我的登录工作正常,并且正在创建令牌。话虽如此,我想current_user从我的 ActionCable 访问相同的内容。按照一些在线教程,我的app/channels/application_cable/connection.rb样子是这样的:

当我调试代码时,env['warden'].user为零。我必须做什么才能current_user通过守望者访问?

0 投票
1 回答
717 浏览

ruby-on-rails - Rails 设计-jwt 会话存储

devise-jwt gem 文档说,如果启用了会话存储,则必须跳过它以进行 jwt auth。它说你应该在 devise.rb 上设置:

你应该禁用 :database_authenticable。这部分我完全不明白。如果在我的用户模型中,我删除:database_authenticable,我为登录配置的路由变得不可用:

ActionController::RoutingError (没有路由匹配 [POST] "/login"):

用户.rb

设计.rb

路线.rb

我应该怎么做才能保持会话,而不是 jwt auth?

0 投票
1 回答
382 浏览

ruby-on-rails - Devise-JWT:使用 cURL 我可以看到一个授权标头。使用 Axios/Fetch 没有 Authorization 标头

我有一个非常典型的带有 Devise 和 Devise-JWT 的 Rails 后端。当我向端点发出原始 cURL 请求时,/users/sign_in我可以在标头中看到它正在使用令牌设置授权标头。

当我在我的 React 前端(在不同的端口上,因此需要跨源配置)上执行相同的请求时,我在结果中看到的唯一标头是缓存控制和内容类型。

现在,我已经安装了“cors”gem。我创建了一个名为的初始化程序config/initializers/cors.rb,并将此配置放入其中:

然而,当我在我的 React 前端发出请求时,我看不到 Authorization 标头。

我可以看到 Rails 正在响应 302 重定向。这是问题的一部分吗?我是否需要配置设备以停止响应 302?

我完全不知道问题可能是什么。

如果您观察下面的屏幕截图,通过普通表单登录以正常方式登录会给我一个 Authorization 标头,但如果我通过 AJAX 进行,则没有标头。

此图像显示,当使用非 AJAX 请求正常访问 /users/sign_in 端点时,有一个 Authorization 标头

这是前端(AJAX)代码,它没有给我任何授权标头,只有“缓存控制”和“内容类型”:

结果:

在此处输入图像描述

0 投票
2 回答
2719 浏览

ruby-on-rails - 尝试访问受 Devise JWT 保护的 API 时出现“没有可用的验证密钥”

我已经devise-jwt安装了宝石。我可以执行登录请求,并收到一个授权令牌作为回报,但是当我尝试访问安全端点时,我收到以下消息:No verification key available.

这是我的config/initializers/devise.rb文件中的内容:

我可以正常登录并收到授权令牌:

似乎我也暴露了 Authorization 标头:

我的用户模型:

我很困惑,任何帮助表示赞赏。谢谢。

0 投票
1 回答
371 浏览

ruby-on-rails - 如何阻止设计尝试重定向到 /users/sign_in 以获取 API 请求?

在我的反应前端,我有一个 API 请求,它通过 axios 库发送到我的 ruby​​ on rails 后端:

执行上述请求时,我在后端日志(ruby on rails)中看到以下响应链:

.catch块永远不会被调用。当我查看响应时,我看到 2 个成功的 200 个响应。401 响应不会显示在前端。

我正在尝试捕获 401 状态代码,然后通过我的反应前端向用户显示登录表单。后端(设计 gem)试图将我重定向到 /users/sign_in,这不是我想要发生的。我只想要一个 401 以便我的反应应用程序可以显示自己的登录表单,但由于我不知道的原因,axios 只显示具有 200 个状态的响应。

0 投票
1 回答
214 浏览

ruby-on-rails - ROR:devise-jwt:如何调用 jwt_revoked?功能?

我正在为我的 ror api 使用 devise 和 devise-jwt。如果发送的用户不记名令牌被撤销,我想知道用户(通过 api 调用)。

我做了这条路线:

但它给我带来了这个错误:#<NoMethodError: undefined method `jwt_revoked?' 对于#用户:0x0000558992eb9b98>

我在我的模型中使用这个 jwt_revocation_strategy: JwtBlacklist:

如何调用 jwt_revoked?功能 ??

谢谢

0 投票
0 回答
156 浏览

ruby-on-rails-5 - JWT::DecodeError for sign_out with invalid token with devise-jwt

我正在尝试从使用 devise 注销时由无效令牌引起的 JWT::DecodeError 中救援。但它不起作用。我不断收到 JWT::DecodeError。会话控制器:

0 投票
0 回答
59 浏览

ruby-on-rails - API Rails:如何使用 Devise 和 JWT 制作 RESTFul API?

我正在尝试使用 devise & jwt 构建一个 RESTFul API。

我可以使用 Postman 使用我的 jwt 熊令牌进行注册和登录/注销。

现在我想发布文章时遇到问题。

我不明白为什么在我用 Postman 发布文章后我的控制台会登录。

我也不明白为什么我会收到这个 401 错误。用 RESTFul + API + Devise + JWT 真的很难找到一些内容。

从长远来看,您认为有或没有 Devise 运行更好吗?因为实际上有些内容没有设计。

我在 Postman 上尝试的东西

当我使用 Postman 发布文章时从控制台返回 ERROR 消息(并且使用与登录/注销相同的熊令牌

应用程序/控制器/articles_controller.rb

db/shema.rb

应用程序/模型/article.rb

应用程序/模型/user.rb

0 投票
2 回答
252 浏览

ruby-on-rails - Rails API + Devise + JWT上的注销问题

我正在构建一个 Rails API。我所有的设计路线都运行良好,只执行一个:注销

我遵循了本教程:https ://jameschambers.co.uk/rails-api

我已经尝试了几件事,例如:

  • 尝试了 api/logout.json 路由
  • 尝试将 rb #111 更改为: config.skip_session_storage = [:http_auth, :params_auth] ( config/initializers/devise.rb )
  • 试图将 rb #280 更改为: config.sign_out_via = :get ( config/initializers/devise.rb )

我在这个地址上发送一个 DELETE 请求:localhost:3000/api/logout,带有 JWT/Bearer 令牌。

错误

铁路路线

数据库/schema.rb

应用程序/控制器/sessions_controller.rb

应用程序/模型/user.rb

配置/路由.rb

0 投票
0 回答
77 浏览

ruby-on-rails - 使用 devise-jwt 进行测试时添加 Bearer 令牌的更简单方法?

我正在做请求规格。我们使用devise-jwt进行身份验证,因此我需要将Authorization标头放在每个需要调用权限的请求中。

我阅读了 Devise JWT 的文档,所以我知道我可以使用

但是,Devise::JWT::TestHelpers.auth_headers, 似乎只是合并{"Authorization" => "Bearer JWT-TOKEN"}到传入的标头哈希中。
为什么我不能直接拥有 hash {"Authorization" => "Bearer JWT-TOKEN"},可以吗?

或者我真正的问题是为什么它需要 Warden::JWTAuth::HeaderParser.to_headers 在auth_headers方法中?那是干什么用的?