railsでfacebookを用いた、ソーシャルログイン(および新規登録)を実装

自身の記憶定着用の備忘録

 

【参考にした記事】

device:gemの公式

https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

 

実際の実装に使用させていただいた記事

https://qiita.com/keirof1892/items/4d086e5ed0872dee7dac

 

deviceを使わず実装しているため、概念的な理解に使用させていただいた記事

https://qiita.com/memetics/items/214babcebae32c52933c

 

実装の流れ

facebook divに登録

②omniauthの導入

snsからの情報を記録するテーブル(sns_credential )の作成

④userとsns_credentialアソシエーションの設定

facebookから情報を取得することを許可するための環境変数の設定

⑥userモデルのdeviseに:omniauthable,omniauth_providers:の追加

self.find_oauth(auth)メソッドをuserモデルに設定

 facebookから得た情報はauth.info.〇〇で表現できる。

 メソッド内の条件分岐は

 1.自身のアプリにすでにsns_credentialの登録があるユーザーかどうか

 2.自身のアプリにすでにuserの登録があるかどうか

 分ける。

 条件分岐の意図は  userがない場合は新規作成(sing_up)、

           userある場合は(sign_in)させるため.

      sns_credentialのテーブルにすでに、データが存在する場合は、

  そのデータを用い て、ログインする。sns_credentialの情報がない場合は、

  facebookから取得した情報を登録し、その情報を持ってログインする。

  それぞれの情報を帰り値として返し、メソッドの呼び出し元に返す。

 

 

omniauth_callbacks_controller.rbの作成。

 ⑦の条件分岐によって取得した値を用いて、アクションを設定する。

  すでにuserがある場合はログイン、

     userがない場合は新規登録画面に遷移する。

  新規登録に遷移の場合はnicknameとmailアドレスをfacebook側から取得して

  いるので、そのデータを新規登録画面にデフォルトで反映させておく。

 

⑨コールバック、facebookwを用いた新規登録の際のルーティングを設定。

 

⑩新規登録の実装。facebookからの登録の場合はパスワード設定することなく、

 新規登録を完成させる。sns_credentialテーブルにuid(ユーザーの識別番号)と

 いうカラムを設定し、新規登録のアクションでuser_idと紐つけることで、

 ユーザーとfacebookの情報を紐つけてデータベースに登録する。

 

 

 

facebook登録のボタンは、任意のところにlink_toで設定すればok

 

 

結構詰まりました。

 

しっかりdeviceのreadmeを読んで、「facebookから得た情報はauth.info.〇〇で表現できる。」などを理解する必要がある。

 

前提条件が違うため、コピペでは動かない。

 

自分のコピーしようとしているコードを1行づつ理解し、実装することが大切。