久しぶりにlaravelを触っていますが、バージョン7が出ていてびっくりしました。バージョンアップ時の書き方が変わったらしいですね。
今回は自分用のメモとしてSNSログインについて簡単に書いていきます。
目次
今回学ぶ事
基本的な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
そんな感じで
以上!