2014-06-24 2 views
0

oauth-twitter gem을 구현하여 내 사용자가 twitter로 가입/로그인 할 수있게하려는 경우, 트위터에서 내 앱을 수락 한 후 사용자가 리디렉션 될 때 문제가 발생합니다. , 가입 페이지로 리디렉션됩니다. 여기 Ruby on rails omniauth-twitter and devise

내 설정이다 :

응용 프로그램/컨트롤러/사용자/omniauth_callbacks_controller.rb 다음

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
    def twitter 
    # You need to implement the method below in your model (e.g. app/models/user.rb) 
    @user = User.from_omniauth(request.env["omniauth.auth"]) 

    if @user.persisted? 
     sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated 
     set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? 
    else 
     session["devise.twitter.data"] = request.env["omniauth.auth"].except("extra") 
     redirect_to new_user_registration_url 
    end end 

end 

내 응용 프로그램/모델/users.rb

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

    devise :omniauthable, :omniauth_providers => [:twitter] 

def self.from_omniauth(auth) 
    where(auth.slice(:provider, :uid)).first_or_create do |user| 
    user.email = auth.info.email 
    user.password = Devise.friendly_token[0,20] 
    user.name = auth.info.name # assuming the user model has a name 
    end 
end 


def self.new_with_session(params, session) 
    super.tap do |user| 
     if data = session["devise.twitter_data"] && session["devise.twitter_data"]["extra"]["raw_info"] 
     user.email = data["email"] if user.email.blank? 
     end 
    end 
    end 


end 

내 Gemfile

source 'https://rubygems.org' 
ruby '2.1.1' 

gem 'rails', '4.0.0' 
gem "sass-rails", "~> 4.0.0" 
gem 'uglifier' 
gem 'coffee-rails' 
gem 'jquery-rails' 
gem 'jbuilder', '~> 1.2' 
gem 'bootstrap-sass' 
gem 'devise' 
gem "font-awesome-rails", "~> 4.0.1.0" 
gem 'masonry-rails', '~> 0.2.0' 
gem "zeroclipboard-rails", "~> 0.0.10" 
gem "will_paginate", '~> 3.0' 
gem 'intercom-rails', '~> 0.2.24' 
gem 'magnific-popup-rails' 
gem "rake" 
gem 'omniauth-twitter' 





group :development, :test do 
    gem 'sqlite3' 
end 

group :production do 
    gem 'pg' 
    gem 'rails_12factor' 
end 

group :doc do 
    # bundle exec rake doc:rails generates the API under doc/api. 
    gem 'sdoc', require: false 
end 

# Use ActiveModel has_secure_password 
# gem 'bcrypt-ruby', '~> 3.0.0' 

# Use unicorn as the app server 
# gem 'unicorn' 

# Use Capistrano for deployment 
# gem 'capistrano', group: :development 

# Use debugger 
# gem 'debugger', group: [:development, :test] 

설정/초기화/devise.rb에

내가 추가 한 :

require 'omniauth-twitter' 
    config.omniauth :twitter, "APP_ID", "APP_KEY", :strategy_class => OmniAuth::Strategies::Twitter 

하지만 내 사용자가 링크를 통해 가입 할 때 :

<%= link_to "Sign in with twitter", user_omniauth_authorize_path(:twitter) %> 

과 트위터에 내 응용 프로그램을 받아 그들로 리디렉션됩니다 가입 페이지, 그리고 아무것도 채우고 있지 않다, 나는 이메일 주소가 트위터를 통해 검색 할 수 없다는 것을 알고 있지만, 이름은 무엇? 그 이름을 써야합니까? 귀하의 사용자 모델의 new_with_session (PARAMS 세션) 메소드 내부

+0

보기 코드가 @ user.name 또는 자동으로 채우려는 값을 사용합니까? –

+0

@JohnPaulAshenfelter 당신이 묻고있는 것이 확실하지 않지만, app/views/users/show.html.erb에서 <% provide (: title, @ user.name) %> 사용자 이름을 보여줍니다. 사용자 프로필 페이지에서 – zacchj

답변

-1

잘못된 것이 무엇을 가리키는 대한

덕분에, 당신은 트위터의 데이터 리턴에서 데이터를 검색이 일부 할당을하지 않았다.

+0

지적 해 주셔서 감사합니다! 여기에서 데이터를 얻을 수있는 방법에 대한 조언을 해줄 수 있습니까? – zacchj

+0

twitter api를 보거나 세션 [ "devise.twitter.data"] 값을 레일 콘솔에 출력하고 원하는 것을 얻으십시오. – nickcen

+0

감사합니다. 어떻게 할 수 있을지 모르겠습니다. 너 레일 콘솔 줄 줄 수있어? thanks – zacchj