Rails에서 Facebook 로그인 기능
이 기사에서는 9단계로 Facebook 로그인 기능을 구현할 수 있습니다.
전제
· 페이스 북 계정이 있습니다.
· devise 사용자
아래 절차입니다 모두 9 단계
(1) 오른쪽 상단의 새로운 앱 추가를 클릭
양식에 입력
APP_ID와 APP_SECRET이 생성된다. # 나중에 사용하기 때문에 기억하십시오.
(2) 새로운 플랫폼 추가 → 웹 사이트 선택 → 사이트 URL에 facebook 로그인을 사용하는 URL을 입력 (다음은 개발 환경입니다)
⚠️ 프로덕션 환경에서 취급한다면 사이트 URL도 적절히 변경.
(3) gemfile에 추가
GemFile
gem "omniauth", '~>1.6' # バージョンは任意で指定
gem "omniauth-facebook", '~> 4.0' # バージョンは任意で指定ください
$bundle install
(4) user 테이블에 3 열 추가
$ rails g migration AddFieldsToUser provider:string uid:string image:string
$ rake db:migrate
(5) config/initializers/devise.rb
config/initializers/devise.rb
Devise.setup do |config|
~中略~
最下部に以下を追加
config.omniauth :facebook, 'API_KEY', 'API_SECRET', scope: 'email', info_fields: 'email, name' # ⚠︎API_KEYとAPI_SECRETは(1)手順で作成したものを記述してください(直書きが危険ですので環境変数とかにして置くのが安全です)
end
참고)
ぃ tp // 이 m / 노라 rld / ms / b 80811c9 30b4474 af # 환경 변수
(6) 메소드를 작성한다! 모델 및 컨트롤러에 설명
우선 모델에 메소드 추가
models/user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable,
:validatable, :confirmable,
:omniauthable ←ここだけ追加してます
# userがいなければfacebookアカウントでuserを作成するメソッド
def self.from_omniauth(auth)
user = User.where(email: auth.info.email).first
if user
return user
else
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
# userモデルが持っているカラムをそれぞれ定義していく
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
user.name = auth.info.name
user.image = auth.info.image
user.uid = auth.uid
user.provider = auth.provider
# If you are using confirmable and the provider(s) you use validate emails,
# uncomment the line below to skip the confirmation emails.
user.skip_confirmation!
end
end
end
end
컨트롤러
controllers/omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
# 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 => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
def failure
redirect_to root_path
end
end
(7) view를 준비!
등록 페이지와 로그인 페이지에 작성
registrations/new.html.erb
<%= link_to "Facebookで会員登録", user_facebook_omniauth_authorize_path %>
sessions/new,html.erb
<%= link_to "Facebookでログイン", user_facebook_omniauth_authorize_path %>
(8) 라우팅 설정
routes.rb
Rails.application.routes.draw do
中略
devise_for :users,
path: '',
path_names: {sign_in: 'login', sign_out: 'logout', edit: 'profile', sign_up: 'registration'},
controllers: {omniauth_callbacks: 'omniauth_callbacks'}
end
(9) 아이콘 설정
application_helper.rb
module ApplicationHelper
def avatar_url(user)
if user.image
"http://graph.facebook.com/#{user.uid}/picture?type=large" # facebookの画像があった場合
else
# 代替の何かを返す
end
end
end
이것으로 완료
localhost:3000/registration으로 이동
(facebook 로그인 참조)
htps : // 기주 b. 코 m / p ぁ ふぉ r 마테 c /에서 ゔ ぃせ / うぃき / m에 맞는 th : - 오 r ゔ ぃ w
Reference
이 문제에 관하여(Rails에서 Facebook 로그인 기능), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nakki/items/b9339553dd9e28ab0db1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)