设计在XHR上抛出HTTP auth并注销

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

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

config.http_authenticatable = false config.http_authenticatable_on_xhr = false 

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

这令人非常沮丧。 我已经将Devise和Warden解压缩到我的vendor / gems目录中,以便我可以尝试调试它,但老实说我无法弄清楚从哪里开始。 任何帮助将非常感激。

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

如果你去手动路线,你应该首先获取’authenticity_token’元标记的值,并使用它作为实际标记元标记的名称,而不是硬编码对’csrf-token’的引用。

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