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 세션) 메소드 내부
보기 코드가 @ user.name 또는 자동으로 채우려는 값을 사용합니까? –
@JohnPaulAshenfelter 당신이 묻고있는 것이 확실하지 않지만, app/views/users/show.html.erb에서 <% provide (: title, @ user.name) %> 사용자 이름을 보여줍니다. 사용자 프로필 페이지에서 – zacchj