Rails에서 Facebook 로그인 기능

이 기사에서는 9단계로 Facebook 로그인 기능을 구현할 수 있습니다.



전제
· 페이스 북 계정이 있습니다.
· devise 사용자

아래 절차입니다 모두 9 단계


  • 아래 facebook 개발자에서 앱 계정 만들기


  • (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

    좋은 웹페이지 즐겨찾기