【问题标题】:Authentication failure : Devise + OmniAuth + Twitter身份验证失败:设计 + OmniAuth + Twitter
【发布时间】:2012-07-09 13:40:33
【问题描述】:

我在成功登录 Twitter 并且页面被重定向到登录页面后收到 (twitter) Authentication failure! invalid_credentials: OAuth::Unauthorized, 401 Unauthorized 错误

这是应用程序配置

routes.rb

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

devise.rb

config.omniauth :twitter, "KEY", "SECRET"

omniauth_callbacks_controller.rb

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController  
  def twitter
    auth = env["omniauth.auth"]
    Rails.logger.info("auth is **************** #{auth.to_yaml}")
    @user = user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || User.new
    if @user.persisted?
      flash[:notice] = I18n.t "devise.omniauth_callbacks.success"
      sign_in_and_redirect @user, :event => :authentication
    else
      session["devise.twitter_uid"] = auth["uid"]
      redirect_to new_user_registration_url
    end
  end
end

user.rb

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me, :provider, :uid
  # attr_accessible :title, :body
end

index.html.erb

<h3>Home</h3>

<%if user_signed_in? %>
  <div><%="Welcome #{current_user.email}"%></div>

<div><%=link_to "Logout", destroy_user_session_path, method: :delete%></div>

<%else%>
<div><%=link_to "Sign in twitter", user_omniauth_authorize_path(:twitter)%></div>
<%end%>

控制台日志

Started GET "/users/auth/twitter" for 127.0.0.1 at 2012-07-09 18:58:16 +0530
(twitter) Callback phase initiated.
(twitter) Callback phase initiated.
(twitter) Authentication failure! invalid_credentials: OAuth::Unauthorized, 401 Unauthorized

Started GET "/users/auth/twitter/callback?oauth_token=rLCEqgAWPtoIzce475sacKwoqU5baEdz0JnmldXE&oauth_verifier=xYPoz2LZGHQlmz4akoVGkarPtZTebCOmeWzPUqLcPA" for 127.0.0.1 at 2012-07-09 18:58:48 +0530
Processing by Users::OmniauthCallbacksController#failure as HTML
  Parameters: {"oauth_token"=>"rLCEqgAWPtoIzce475sacKwoqU5baEdz0JnmldXE", "oauth_verifier"=>"xYPoz2LZGHQlmz4akoVGkarPtZTebCOmeWzPUqLcPA"}
Redirected to http://localhost:3000/users/sign_in

dev.twitter.com 中的回调 URL 早些时候它是http://127.0.0.1:3000。从Devise, Omniauth and Twitter 我把它改成了http://127.0.0.1:3000/auth/twitter/callback 但还是报错

有人可以帮忙解决这个问题吗?

谢谢, 阿米特·帕特尔

【问题讨论】:

  • devise.rb 中的密钥和密码是否正确?
  • 是的。我已经正确配置了它。今天我发现了这个问题。我还按照以下答案中的建议配置了 rake。我只是删除了 omniauth.rb 并重新启动服务器,它就开始工作了。

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


【解决方案1】:

我发现了问题。我在devise.rbomniauth.rb 中都配置了提供程序。我只是删除了omniauth.rb,它就开始工作了。

【讨论】:

  • 哇,一个凡人怎么会知道呢?应该有一个新的奥运会运动,极限调试。
  • 哇;有趣的错误,如果是的话?为什么会这样?如果您同时拥有 devise.rbomniauth.rb 配置文件,为什么会出现复杂情况?
  • 哇!感谢您的自动回复:D
  • 设计文档说您不应该拥有omniauth凭据。它基本上取代了它。 Devise 旨在与omniauth 一起使用,因此devise.rb 文件中的调用config.omniauth :twitter, ENV["TWITTER_CONSUMER_KEY"], ENV["TWITTER_CONSUMER_SECRET"] 旨在模拟从omniauth.rb 调用等效项
【解决方案2】:

尝试将您的 twitter KEY 代码放入您的 initilizers 文件夹中的 omniauth.rb 文件中。像这样:

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, 'KEY', 'SECRET'
end

per:https://github.com/intridea/omniauth twitter 的身份验证毕竟是通过omniauth 进行的,而不是设计。

祝你好运! @thatdankent

【讨论】:

  • 感谢@thatdanketnt。我想出了问题。我还按照您的建议配置了omniauth rake 中间件。我只是删除了omniauth.rb,它对我有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多