[Rails] Devise에 의한 3 분 Facebook 로그인 (개발 초보자 용)
13601 단어 FacebookSDKRailsdeviseapi루비
Facebook 로그인 기능, 있으면 편리하네요.
하지만 퀵 스타트 참조도 할 수 없다 ... 원격으로 버그 ... 등 API의 도입은 나름대로 뼈가 부러집니다.
다만, devise의 힘을 빌려, 조금 구조를 알면, 초보자라도 환경 불문하고, 3분으로 할 수 있습니다!
사전 준비
Facebook for developers에 등록
1. 먼저 계정을 등록하고 애플리케이션을 등록합니다.
대시보드 참조. 자신의 애플리케이션 등록을 확인.
2. 사이트 URL을 등록합니다.
로컬 환경에서 움직이고 싶다면 localhost, production 환경에서 움직이고 싶다면 URL을 그대로 붙여 넣습니다.
표시 이름, 앱 아이콘은 좋은 타이밍에.
3. 프로덕션 환경으로의 전환
원격으로 움직이고 싶다면 추가로 다음과 같이 등록 상태를 개발 환경에서 프로덕션 환경으로 변경해야합니다.
코드 설명
1.gem을 설치합니다.
Gemfile
gem 'omniauth'
gem 'omniauth-facebook'
2.users 테이블에 다음 열을 추가합니다.
AddOmniauthToUser.rb
class AddOmniauthToUsers < ActiveRecord::Migration[5.0]
def change
# omniauthプロバイダー情報(今回はFacebook)
add_column :users, :provider, :string
# omniauthログイン用インデックス
add_column :users, :uid, :string
end
end
3.devise의 설정 파일에 아래의 설명을 자신의 API 키와 함께 추기해 주세요.
devise.rb
require 'omniauth'
require 'omniauth-facebook'
config.omniauth :facebook,'アプリIDが入ります','app secretが入ります'
4. 장치가 자동 생성하는 모델의 설정을 다음과 같이 추가합니다.
user.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
↓
user.rb
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,:omniauthable, omniauth_providers: [:facebook]
user.rb
#Facebookログインへの橋渡し
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.name = auth.info.name
user.email = auth.info.email
user.password = Devise.friendly_token[0,20]
# imageカラムの場合この記述(筆者のUploderはキャリアウェーブ)
user.remote_image_url = auth.info.image.gsub('http://','https://')
end
end
5. 명령 프롬프트에서 rails g devise:controllers users로 devise 내부의 omniauth controller를 당깁니다.
facebook에서의 로그인 방식을 이하와 같이 지정.
omniauth_callbacks_controller.rb
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.from_omniauth(request.env["omniauth.auth"])#ここでモデルに記述した橋渡しメソッドを使用
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
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
6. 디바이스의 컨트롤러를 커스터마이즈 했으므로, devise에게 그것을 가르쳐 주세요.
다른 컨트롤러를 편집하는 경우에도 이 작업이 필요합니다.
route.rb
devise_for :users,:controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
7.assets/javascript 아래에 앱 ID와 함께 다음 js 파일을 설치해 봅시다.
아래의 js 파일은 Facebook SDK와 응용 프로그램을 연결합니다.
facebook.js
$(function(){
window.fbAsyncInit = function() {
FB.init({
appId : 'あなたのアプリケーションIDが入ります',
cookie : true,
xfbml : true,
version : 'v2.8'
});
FB.AppEvents.logPageView();
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
function checkLoginState() {
FB.getLoginStatus(function(response) {
statusChangeCallback(response);
});
}
});
8. 구현하고 싶은 부분의 뷰 파일에 아래의 설명으로 버튼을 설치합니다.
라우팅의 prefix는 rails routes에서 확인하십시오.
구현하고 싶습니다.
= link_to "Facebookでログイン", user_facebook_omniauth_authorize_path, class: "login-button facebook" ,method: :post
이상으로 완성입니다. 간단하지만 이것으로 Facebook 로그인이 가능합니다.
불명점이나, 추기하는 것이 좋은 부분이 있으면 코멘트 주시면 다행입니다.
Reference
이 문제에 관하여([Rails] Devise에 의한 3 분 Facebook 로그인 (개발 초보자 용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Tsutou/items/bdfd9428757c25d407bb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)