Ruby on rails 3 身份验证失败:设计+;OmniAuth+;啁啾

Ruby on rails 3 身份验证失败:设计+;OmniAuth+;啁啾,ruby-on-rails-3,twitter,devise,omniauth,Ruby On Rails 3,Twitter,Devise,Omniauth,我的(twitter)身份验证失败!无效的_凭据:OAuth::Unauthorized,401 Unauthorized成功登录twitter后出错,页面被重定向到登录页面 下面是应用程序配置 routes.rb devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } config.omniauth :twitter, "KEY", "SECRET" cla

我的
(twitter)身份验证失败!无效的_凭据:OAuth::Unauthorized,401 Unauthorized
成功登录twitter后出错,页面被重定向到登录页面

下面是应用程序配置

routes.rb

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
config.omniauth :twitter, "KEY", "SECRET"
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
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
<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%>
设计.rb

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
config.omniauth :twitter, "KEY", "SECRET"
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
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
<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%>
omniauth\u回调\u controller.rb

devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
config.omniauth :twitter, "KEY", "SECRET"
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
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
<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%>
dev.twitter.com中的回调URL 早些时候是
http://127.0.0.1:3000
。从我改为
http://127.0.0.1:3000/auth/twitter/callback
但仍会出现错误

有人能帮忙纠正这个问题吗

谢谢,
Amit Patel

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

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, 'KEY', 'SECRET'
end
毕竟,twitter的认证是通过omniauth进行的,而不是Desive

祝你好运!
@丹肯特,我发现了问题所在。我已经在
designe.rb
omniauth.rb
中配置了提供程序。我只是删除了omniauth.rb,它就开始工作了

您是否在
designe.rb
中拥有正确的密钥和密码?是。我已经正确地配置了它。今天我发现了这个问题。我还按照下面的回答配置了rake。我只是删除了omniauth.rb并重新启动了服务器,它就开始工作了。谢谢@thatdanketnt。我解决了这个问题。我还按照您的建议配置了omniauth rake中间件。我只是删除了omniauth.rb,它对我起了作用。哇,一个凡人怎么会知道这一点呢?应该有一个新的奥运项目,xtreme;有趣的虫子,如果是的话?为什么会这样?如果您同时拥有
designe.rb
omniauth.rb
配置文件,为什么会出现复杂性?哇!感谢您的自动回复:Ddevise文档说您不应该拥有omniauth凭据。它基本上取代了它。Deviate设计用于omniauth,因此,
Deviate.rb
文件中的调用
config.omniauth:twitter,ENV[“twitter\u CONSUMER\u KEY”]、ENV[“twitter\u CONSUMER\u SECRET”]
设计用于模拟从omniauth.rb调用等效项