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
Reference
이 문제에 관하여(rails gem omniauthable을 사용하여 Facebook으로 로그인 할 수있는 기능 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kitaokeita/items/f108565af63555ff17f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)