【Rails】omniauth-twitter로 Twitter 로그인을 구현하는 흐름
9392 단어 TwitterAPI루비RailsOmniAuth
TwitterAPI 준비
Twitter Developers
Gemfile 편집
Gemfile
gem 'omniauth'
gem 'omniauth-twitter'
gem 'devise'
gem 'dotenv-rails' #後で使う
$ bundle install
$ rails g devise:install
$ rails g devise user
$ rake db:migrate
devise.rb 편집
.env
TWITTER_ID='ペースト'
TWITTER_APP_SECRET='ペースト'
.gitignore
/.env
config/initializers/devise.rb
config.omniauth :twitter, ENV['TWITTER_ID'], ENV['TWITTER_APP_SECRET']
user.rb 편집
user.rb
#以下を追記
protected
def self.find_for_oauth(auth)
user = User.where(uid: auth.uid, provider: auth.provider).first
unless user
user = User.create(name: auth.info.name,
email: User.dumy_email(auth),
provider: auth.provider,
uid: auth.uid,
password: Devise.friendly_token[0, 20]
)
end
user
end
private
def self.dumy_email(auth)
"#{auth.uid}-#{auth.provider}@example.com" #POINT
end
위와 같이 작성된 User에 대해서는
self.dumy_email
에 의해 더미의 메일 주소를 생성하도록(듯이) 하고 있습니다. 여기에서는 auth.id
와 auth.provider
의 조합이 일의인 것을 이용하고 있습니다.Google/Facebook 로그인의 구현에서는,
email: auth.info.email
로 메일 주소를 취득할 수 있었습니다만, TwitterAPI에서는 nil
가 바뀌어 버리기 때문에, 위와 같은 구현이 필요.routes.rb 편집
routes.rb
devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }
omniauth_callbacks_controller.rb 구현
app/controllers/users/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def twitter
callback_from :twitter
end
def callback_from(provider)
provider = provider.to_s
@user = User.find_for_oauth(request.env['omniauth.auth'])
if @user.persisted?
flash[:notice] = I18n.t 'devise.omniauth_callbacks.success', kind: provider.capitalize
sign_in_and_redirect @user, event: :authentication
session[:user_id] = @user.id #add
else
session['devise.#{provider}_data'] = request.env['omniauth.auth']
redirect_to new_user_registration_url
end
end
end
로그인 링크 구현
login_form.html.erb
<%= link_to 'Twitterログイン', user_twitter_omniauth_authorize_path %>
Heroku 배포에서 오류가 발생하는 경우
아래의 기사의 후반에서,
Precompiling assets failed
【Rails】Google 로그인 구현~Heroku 배포까지의 길
heroku run rails db:migrate 전에 할 일!
이번에는 TwitterAPI 정보를
.gitignore
로 지정하고 있으므로 Heroku 측에서 설정해야합니다.$ heroku config:set TWITTER_ID='ペースト'
$ heroku config:set TWITTER_APP_SECRET='ペースト'
$ heroku run rails db:migrate
참고 링크
Devise+OmniAuth에서 사용자 인증을 구현하는 단계
Reference
이 문제에 관하여(【Rails】omniauth-twitter로 Twitter 로그인을 구현하는 흐름), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kenz-dev/items/7995cd8796c6181b6c95텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)