rails gem omniauthable을 사용하여 Facebook으로 로그인 할 수있는 기능 만들기

환경
rail 5.0.2
deviseでログイン機能を作っている。

할 일
facebook 계정을 사용하여 앱에 로그인할 수 있는 기능을 만든다. 로그인 기능을 devise로 만들고 있는 전제로 한다.

로그인 기능으로 devise 하는 방법
htps : // 기주 b. 고 m / p

Gemfile
 gem 'omniauth-facebook'

이   gem 추가

터미널
$rails g migration AddOmniauthToUsers provider:string uid:string
$rake db:migrate

config/initializers/devise.rb

config.omniauth :facebook, "APP_ID", "APP_SECRET", scope: 'email', info_fields: 'email,name'



위의 "APP_ID", "APP_SECRET"은 "facebookacebookdevelopers"로부터 취득한다. 이것은 facebookacebookdeveloper에서 설명하기 때문에 나중에 씁니다.

app/models/user.rb

class User < ApplicationRecord

 devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable

 .......
 ....
 ..


end


devise : 곳에 : omniauthable을 추가합니다.

config/routes
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }

routes에 추가합니다.

app/controllers/users/omniauth_callbacks_controller.rb를 만듭니다.
user 폴더를 만들고 컨트롤러를 만듭니다.

app/controllers/users/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

app/models/user.rb

class User < ApplicationRecord

 devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :omniauthable

 def self.from_omniauth(auth)
  where(provider: auth.provider, uid: auth.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
    user.image = auth.info.image # assuming the user model has an image
    # 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


facebookdevelopers 설명



페이스 북으로 로그인하려면 facebookdevelopers를 사용합니다.

facebookdevelopers 링크
google에서 facebookdevelopers로 확인하십시오.

다음으로 facebook에서 각자의 계정으로, facebook에 로그인해 주세요

새로운 앱을 만드는 버튼을 누르십시오.



톱 페이지의 오른쪽 상단에 내 앱의 버튼이 있으므로,주세요. 그러면 새로운 앱이 추가됩니다.



새 앱 설정



다음 화면이 나옵니다.


표시 이름은 각 앱의 이름을 붙여 주세요.
메일 주소는 각자의 메일 주소가 나온다.

카테고리는 앱의 종류이므로 각자의 가득한 종류를 선택하십시오.

그런 다음 앱 ID를 만드십시오.

확인을 위해 위의 영문자를 치십시오.

제품 화면





이 화면이 나옵니다. 왼쪽 상단 대시보드

플랫폼 선택





그런 다음 플랫폼 작성의 파란색 버튼을 넣으십시오.


이것은 앱이 어떤 종류의 등록입니다. 오른쪽의 웹 사이트를 누르십시오.

상세 등록







하단에 URL을 등록하는 버튼이 있습니다. 여기는 http://localhost:3000/이라고 치십시오.
이것으로 등록이 끝납니다.

유효한 OAuth 리디렉션 URI에도 http://localhost:3000/ 해주세요.



그런 다음 이 대시보드 화면으로 돌아갑니다. 오른쪽 상단의 앱 버튼을 눌러 앱 이름을 선택하면 돌아올 수 있습니다.

빨간색 문자로 숨겨져 있지만 위의 앱 ID와 app secret을 확인하십시오.
앱 시크릿은 Facebook 비밀번호를 입력하지 않으면 표시하지 않습니다.

config/initializers/devise.rb

config.omniauth :facebook, "APP_ID", "APP_SECRET", scope: 'email', info_fields: 'email,name'



앱 ID와 앱 비밀번호를 에 입력합니다.

페이스 북 버튼 링크



<%= link_to "Sign in with Facebook", user_facebook_omniauth_authorize_path %>

app/views/devise/registrations/new.html.erb

<%= link_to "Sign in with Facebook", user_facebook_omniauth_authorize_path %>


마찬가지로 로그인 페이지에도 동일한 링크를 붙입니다.

이것으로 끝입니다.

감상
facebook 붙이는 것은 의외로 간단했다. 자신은, 다른 앱에 facebook을 사용해 등록을 하는 것이 많기 때문에, 좋다고 생각했다.

참고 자료
htps : // 기주 b. 코 m / p ぁ ふぉ r 마테 c /에서 ゔ ぃせ / うぃき / m에 맞는 th : - 오 r ゔ ぃ w

좋은 웹페이지 즐겨찾기