4

我在使用 OmniAuth 对我的 Rails 应用程序进行身份验证时遇到了很多问题。我重新启动服务器并在隐身模式下打开一个新选项卡(以便清除 cookie)并加载我的应用程序。我登录,然后进入应用程序。

当我进入一个通过 AJAX 调用经过身份验证的操作的页面时,它会通过 HTTP 基本身份验证请求用户名和密码。我在我的devise.rb中禁用了这个。

config.http_authenticatable = false
config.http_authenticatable_on_xhr = false

然后当我返回上一个页面时,它会将我重定向到登录页面并要求登录。当我访问不需要身份验证的页面然后返回经过身份验证的页面时,也会发生这种情况。

这令人非常沮丧。我已将 Devise 和 Warden 解压到我的vendor/gems目录,以便尝试调试它,但老实说,我不知道从哪里开始。任何帮助将不胜感激。

4

1 回答 1

3

您的 AJAX 调用可能没有设置 CSRF 令牌。您可能需要更新您的 UJS gem(可能是 jquery-rails)或手动将 X-CSRF-Token HTTP 标头设置为标记的值。看到这个问题:设计会话立即过期 .js 调用 [AJAX]。您可以通过临时禁用 CSRF 保护来测试这是否是问题config.allow_forgery_protection = false所在config/application.rb

如果您走手动路线,您可能应该首先获取“authenticity_token”元标记的值,并将其用作实际令牌元标记的名称,而不是硬编码对“csrf-token”的引用。

如果可以的话,我建议更新到 Rails 3.0.10 或 3.1。我在 3.0.7 上仍然遇到问题。

于 2011-09-25T22:27:06.053 回答