Rails 3用户名密码在URL中用于经过身份验证的Devise资源

时间:2011-11-15 06:25:01

标签: ruby-on-rails ruby-on-rails-3 devise

我很困惑为什么我不能在浏览器中使用它。我想使用URL中的用户名和密码来测试经过身份验证的Devise资源

http://joe:1234@localhost:3000/blog/latest

它不会进行身份验证,而是将我重定向到Devise登录页面。但是,如果我将它作为json调用,它可以正常工作

http://joe:1234@localhost:3000/blog/latest.json

如果我使用curl

进行测试,它也有效
curl http://joe:1234@localhost:3000/blog/latest

思想?

2 个答案:

答案 0 :(得分:1)

Devise使用导航格式来确定在进行身份验证时是否应该发出401。默认情况下,JSON和XML请求将为401。但是,HTML请求将重定向到登录名。要解决此问题,请转到初始化程序中的devise.rb,取消注释此行并从数组中删除HTML:

config.navigational_formats = [:"*/*", "*/*"]

答案 1 :(得分:0)

可能希望从设计中查看可验证的令牌。这可能是使用设计开箱即可传递凭证的最有效方法。

令牌可验证:基于身份验证令牌(也称为“单一访问令牌”)在用户中签名。可以通过查询字符串或HTTP基本身份验证来提供令牌。

https://github.com/plataformatec/devise/

更深入,如果您需要一个可重复使用的策略,如本文所示,这里有一个方法:https://github.com/plataformatec/devise/wiki/How-To:-Use-HTTP-Authentication

Devise确实内置了HTTP基本身份验证,但您需要在应用中使用两件小东西才能使其正常工作:

* :database_authenticatable strategy in your user/account model
* config.http_authenticatable = true in the devise initializer