Laravel6.*でfacebook認証を実装する流れ

2021.01.18

見出し画像

久しぶりにlaravelを触っていますが、バージョン7が出ていてびっくりしました。バージョンアップ時の書き方が変わったらしいですね。

今回は自分用のメモとしてSNSログインについて簡単に書いていきます。

目次

  1. 今回学ぶ事
  2. ちょー大まかに
  3. 実装の流れ
  4. きおつけるところ
  5. まとめ

今回学ぶ事

基本的なSNS認証の流れを理解する。GoogleやTwitterなんかも同じ様な流れで出来るかと思います。

ちょー大まかに

facebookで必要な設定をする。

設定したものをenvファイルに環境変数として記述。

config/services.phpに記述

ルーティング設定

コントローラー設定

見た目設定

って感じです。

実装の流れ

まず、facebook側から。

facebookからapiを取ってくる。これが無いと始まらない。

取得するのは、アプリIDとapp secret。これを取得したあとは、facebookログインの設定から有効なOAuthリダイレクトURIに自分のサイトで受け取る際のURlを書き込む。

次はアプリ側。

先ほど取得したidとapp secretをenvファイルに設定する。リダイレクトで設定したURLも。

FACEBOOK_APP_ID=303*
FACEBOOK_APP_SECRET=ab99b*
FACEBOOK_CALLBACK_URL=https://127.0.0.1:8000/login/facebook/callback 適宜書き換えてください

次はservice.phpに下記の記述を加えます。これはfacebookにアクセスする際にコントローラーで使用するものです。

'facebook' => [
       'client_id' =>  env('FACEBOOK_APP_ID'),
       'client_secret' => env('FACEBOOK_APP_SECRET'),
       'redirect' =>  env('FACEBOOK_CALLBACK_URL'),
   ]

次はルーティングの設定です。設定するのはfacebookにアクセスするアクションとfacebookからredirectで返ってきた時に動かすアクションまでのルーティングです。

Route::get('login/facebook', 'Auth\LoginController@FacebookLogin');
Route::get('login/facebook/callback', 'Auth\LoginController@FacebookLoginCallback'); リダイレクト時に動くアクション

次はコントローラーに行きます。ここでは先ほど設定したアクションを作っていきます。下記の様な流れになります。

use Laravel\Socialite\Facades\Socialite;
use App\User;
use Auth;
use Carbon\Carbon;

public function FacebookLogin()
   {
       return Socialite::driver('facebook')->redirect();
   }

   public function FacebookLoginCallback()
   {
       $facebook_login = Socialite::driver('facebook')->user();

       $checked_user = User::where(['email' => $facebook_login->getEmail()])->first(); 重複するのを防ぐ

       $now_time = Carbon::now('Asia/Tokyo');

       if($checked_user){
           Auth::login($checked_user);
           return redirect('/home');
       } else {
           $new_user = New User;
           $new_user->name = $facebook_login->getName();
           $new_user->email_verified_at = $now_time;
           $new_user->password = \Hash::make('password');
           $new_user->save();

           Auth::login($new_user);
           return redirect('/home');
       }
   }

そしてviewに以下の記述を加えていきます。

<a href="login/facebook">facebookでログイン</a>

以上で処理の方は終了です。今回は自分はメールログイン時に確認メールを送る処理を書いていたので、FacebookLoginCallback()の中身は少し変わってくるのかなと思います。

きおつけるところ

マイグレーションファイルの記述は見ておいた方がいいかもしれないです。SNSログインだとemailとかが無い場合があるので。。。

あとは、リダイレクトurlはhttpsで返ってきますがローカル環境だとhttpでしか受け取れないので。返ってきた時はurlから直接httpに戻してあげましょう。

まとめ

最初の設定の部分が感じな部分かなと思います。

この流れで他のSNS認証もやっていくイメージで居ます。

久しぶり触ると、曖昧なところがわかるので良い復習になっていきそうですw

そんな感じで

以上!