Rails omniauth - 每次用户登录时Twitter都会要求授权

时间:2011-11-24 02:19:00

标签: ruby-on-rails-3 twitter omniauth

在Railscast中:http://railscasts.com/episodes/241-simple-omniauth Ryan使用omniauth进行登录。在视频中,当他点击登录按钮时,Twitter第一次询问用户是否要授权Ryan的应用程序。第二次单击登录按钮时,它会自动将用户登录。在我的应用程序中,用户每次都被迫授权我的应用程序。如果用户登录到Twitter并且已经授权应用程序,那么它不应该“正常工作”吗?

编辑:我的应用程序目前具有读取,写入和直接消息权限。我也在使用omniauth-twitter(0.0.6)。

7 个答案:

答案 0 :(得分:20)

在这里添加非rails回答。

请务必检查您应用的Twitter设置,选中“允许此应用程序用于使用Twitter登录”复选框。否则Twitter将始终将您重定向到授权页面而不是身份验证。

在最终检查推特设置之前,我花了45分钟对rails应用程序进行故障排除,希望这会节省一些时间。

答案 1 :(得分:3)

如果您已请求DM权限或其他高级权限的许可,则可能会导致问题。 (https://dev.twitter.com/discussions/1459

如果这没有帮助,更多细节将会有用。

答案 2 :(得分:3)

我怀疑twitter oauth gem中的回归或其他内容:

编辑:解决问题。

我相信oauth删除了各个策略。在任何情况下,使用Devise,以下修复此问题(应该对其他Twitter oauth配置进行修改):

config.omniauth :twitter, 'consumer_key' , 'consumer_secret', :client_options => {:authorize_path => '/oauth/authenticate'}

答案 3 :(得分:2)

好的,所以刚刚发布了新版本。请使用0.0.7

https://rubygems.org/gems/omniauth-twitter/versions/0.0.7

感谢@fosrias

干杯, 阿伦

答案 4 :(得分:1)

我解决了只是将登录链接目的地更改为

"/auth/twitter?x_auth_access_type=read"

答案 5 :(得分:0)

似乎当您的应用设置具有读取,写入和访问直接消息时,它总是要求权限。 将其设置为仅读取或读取和写入可解决此问题。

答案 6 :(得分:0)

如果您最初将应用程序权限设置为“读取和写入”,并且稍后在您进行一次身份验证后添加了“访问直接邮件”权限,则后续身份验证尝试将导致“登录”页面重新出现。但是,请注意,您将看到该应用仍然无权访问该用户的直接消息。这是因为您的应用现在正在尝试请求直接的邮件权限,但您的访问令牌最初只是为了读/写而设置。

我找到了this discussion,其中@toptwetcom提到在应用权限更改后必须重新生成您的访问令牌(不是App API密钥)。我仍处于开发模式,但这对我有用:

  1. 转到https://apps.twitter.com,找到您的应用并转到权限标签
  2. 如果您尚未更改“读取,写入和访问直接消息”的权限。 (更改显示有时需要一分钟 - 保持清爽!)
  3. 转到API密钥选项卡(仍为应用程序)
  4. 点击“重新生成我的访问令牌”按钮并确认。
  5. 退出您的应用(如果尚未退出)
  6. 在您的应用中,使用Twitter重新登录(并重新授权您的应用)。
  7. 如果您现在转到https://twitter.com/settings/applications,您应该会看到您已经为您的应用授予了“读取,写入和直接消息”权限。此外,如果您注销您的应用并通过Twitter注销,它应该“正常工作”(假设您已经使用Twitter登录)。

    另外,请务必阅读@JasonLogsdon's answer