身份验证失败:Devise + OmniAuth + Twitter

Ami*_*tel 7 twitter devise omniauth ruby-on-rails-3

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

这是应用程序配置

的routes.rb

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
Run Code Online (Sandbox Code Playgroud)

devise.rb

config.omniauth :twitter, "KEY", "SECRET"
Run Code Online (Sandbox Code Playgroud)

omn​​iauth_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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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%>
Run Code Online (Sandbox Code Playgroud)

控制台日志

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
Run Code Online (Sandbox Code Playgroud)

dev.twitter.com中的回调网址 早先是http://127.0.0.1:3000.从Devise,Omniauth和Twitter我改变它http://127.0.0.1:3000/auth/twitter/callback但仍然出错

有人请帮忙在这里纠正这个问题吗?

谢谢,阿米特帕特尔

Ami*_*tel 22

我发现了这个问题.我已经配置在这两个供应商devise.rbomniauth.rb.我只是删除了omniauth.rb并开始工作.

  • 哇凡人应该怎么知道?应该有一个新的奥林匹克运动,极速调试. (3认同)