Devise,Omniauth和Twitter

时间:2011-08-17 01:17:35

标签: ruby devise twitter-oauth omniauth

我正在开发一个使用设计和omniauth的Rails 3应用程序,并按照https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview中给出的示例进行操作,它适用于Facebook帐户,但当我尝试添加Twitter身份验证时,我得到了一个'401 Unauthorized '回应。为了跟踪问题,我将api.twitter.com的URL切换为http并转储网络流量,看起来它是两次POST到/ oauth / access_token。我第一次得到200响应,第二次得到401.在它之间使用'GET /1/account/verify_credentials.json'方法成功获取经过身份验证的用户的用户信息。我不明白为什么代码第二次调用access_token方法。

在我的config / initializers / devise.rb文件中,我添加了:

config.omniauth :twitter, "consumer_key", "consumer_secret"

除了上面的Omniauth概述页面中列出的其余代码外。

我还在我的OmniauthCallbacksController中添加了一个'twitter'方法,但由于401,它永远不会被调用。

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:7)

尝试在dev.twitter.com上的应用程序设置中填写回调URL。应该是这样的:

回调网址http://yousite.com/auth/twitter/callback

答案 1 :(得分:3)

不确定你最终是否认识到这一点 - 但Twitter不支持localhost个域名。

您可以通过在/etc/hosts中设置本地别名然后在Twitter上的回调网址中输入,或者将您的网站放在面向外部的服务器上来解决此问题。

如上所述 - 回调应采用以下格式:

http://mysite/auth/twitter/callback

答案 2 :(得分:2)

你在使用omniauth-twitter gem吗?

问题可能是因为回调网址。

在开发模式下,您可以将回调网址设为

http://127.0.0.1:3000/auth/twitter/callback

答案 3 :(得分:0)

我遇到同样的问题,因为启用:确认 我决定跳过oauth用户的确认:auth.user.skip_confirmation! 它解决了我的问题。

答案 4 :(得分:0)

我遇到了完全相同的问题,但最终通过删除config/initializers/omniauth.rb文件来实现此功能。它会在请求中加倍,因为您在config/initializers/devise.rb

中进行了设置