Omniatuh设计Twitter不发送用户回到网站

时间:2013-02-02 00:38:25

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

我正在关注瑞安贝茨演员#225设计和omniauth修改...一旦我点击链接注册与Twitter,它带我到

api.twitter.com/oauth/authenticate?oauth_token=vJQeSrxYa6gXSFUspRP9wuzgHTgGRDoN5YjenRGnDcU

页面上说授权batman-fansite使用您的帐户?当我点击登录时没有任何反应,我没有收到回到我的网站,显然没有登录我或签约我。

网址更改为https://api.twitter.com/oauth/authenticate

但除此之外没有任何事情发生在这几个小时,并且遵循每一个可能的建议......

请帮助

devise.rb

       config.omniauth :twitter, ENV["I PUT MY CONSUMER KEY HERE"], ENV["I PUT MY CONSUMER PASSWORD HERE"]

我也有

omniauth.rb

         Rails.application.config.middleware.use OmniAuth::Builder do
             provider :twitter, 'I PUT MY CONSUMER KEY HERE', 'I PUT MY CONSUMER PASSWORD HERE'
         end

我已经听到一些建议,如果你删除了omniauth.rb,它将在你的devise.rb中工作,但如果我删除OMNIAUTH.RB我得到301 Unathorized错误并且不会发送给TWITTER SIGN IN PAGE ......

如果我摆脱devise.rb中的那段代码(不是整个文件只是vonfig.omniauth部分)并保留omniauth.rb我收到路由错误

继承人我的

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, :username

     validates_presence_of :username
     validates_uniqueness_of :username

     def self.from_omniauth(auth)
       where(auth.slice(:provider, :uid)).first_or_create do |user|
       user.provider = auth.provider
       user.uid = auth.uid
       user.username = auth.info.nickname
     end
    end

    def self.new_with_session(params, session)
      if session["devise.user_attributes"]
      new(session["devise.user_attributes"], without_protection: true) do |user|
      user.attributes = params
      user.valid?
    end
  else
  super
end
end

def password_required?
  super && provider.blank?
end

def update_with_password(params, *options)
  if encrypted_password.blank?
  update_attributes(params, *options)
else
  super
end
end
end

我的omniauth_callbacks_controller.rb

 class OmniauthCallbacksController < Devise::OmniauthCallbacksController
 def all
   user = User.from_omniauth(request.env["omniauth.auth"])
   if user.persisted?
     flash.notice = "Signed in!"
    sign_in_and_redirect user
   else
     session["devise.user_attributes"] = user.attributes
    redirect_to new_user_registration_url
    end
   end
   alias_method :twitter, :all
  end

的routes.rb

        devise_for :users, path_names: {sign_in: "login", sign_out: "logout"}, 
          controllers: {omniauth_callbacks: "omniauth_callbacks"}

在我的宝石文件中

gem 'omniauth-twitter', :github => 'arunagw/omniauth-twitter'

我也尝试过添加omniauth gem但是没有做任何事情

在我的观点中我有

  = link_to "Sign in with Twitter", user_omniauth_authorize_path(:twitter) 

在Twitter开发者网站上,我注册了我的网站,添加了一个回调网址

并且我使应用程序类型读取和写入...香港专业教育学院尝试阅读但是这给我一个401错误,我也尝试了读写和访问的消息,但没有任何作用

只有当我检查READ AND WRITE

时,才会将我发送到实际的Twitter登录页面

如果有人有任何建议请帮助

谢谢

1 个答案:

答案 0 :(得分:0)

您必须正确设置回调。如果你在开发中使用localhost,那么你的回调应该是

http://localhost:3000/auth/twitter/callback

您也可以使用IP地址代替localhost,即127.0.0.1