Laravelでソーシャルログインをザザッと作る

どうもこんにちは。

ソーシャルログインをやりたいというクライアントのご意向があり
どうもLaravelでは簡単に実装できるらしい、ということもあり、試してみました。
今回は、LINE/twitter/Googleでやってみたいと思います。

Laravelのインストールと.envへデータベースの設定が終わっている前提です。
ちなみに、今回のLaravelは5.8を使用しています。


認証フォームの作成

Laravel標準の認証フォームを拡張しようと思うので、
なにはともあれコマンド実行

ねんのため、サーバを起動して、確認をしてみましょう。

で、http://localhost:8000/loginにアクセス。

はい。とりあえずそのまんまです。

次へ。


Socialite インストール

こいつがソーシャルログインの元締めのようです。
Composerを使ってインストールしましょう。

インストールできたら、次はドライバをインストールします。
LINE/twitter/Googleと欲張るので、3回コマンド実行です。

では、次。


サービスプロバイダの登録

config/app.phpに下記を追記します。

 


イベントリスナの登録

app/Providers/EventServiceProvider.phpにリスナを登録します。

 


SNSプロバイダごとの設定

プロバイダごとに発行されるclient ID, client secret, callback urlを設定します。
基本的には.envに定義しておいて、config/service.phpで読み込むようにするのが良いですね。

.env

config/service.php


データベース

make:authで使用するUserテーブルにちょっと手を加えます。
パスワードが不要なので、passwordカラムをnullableに変更しましょう。

その前に、doctrine/dbalをインストールします。

インストールできたら、migration用ファイルを作成します。
まずはコマンド。

作成されたファイルを編集します。

ここまできたら、migrate。

データベースを確認して、思い通りになっていたらOKです。


実装

では、実装です。

LoginController

app/Http/Controllers/Auth/LoginController.phpに下記を追加します。

ルーティング

routes/web.phpに下記を追記します。

ビュー

ログインのビューに各プロバイダログイン用のリンクを設置します。
アイコンはfont-awesomeのを使おうと思うので、
まずはresources/views/layouts/login.blade.phpにCSS読み込み部分を追記します。
font-awesomeについてはこちら ⇒ Font Awesome

次にresources/views/auth/login.blade.phpを編集します。


確認

さて、ここまで来たら、もう一度ログインページを覗いてみると・・・?

いけてるやん!
ためしに、LINEのアイコンをぽちっとな。

おお。
あとは権限を許可したら・・・

Woops!なんかエラー出ました。
GuzzleHttp \ Exception \ RequestException
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

ググってみると解決方法が! ⇒ cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http: curl.haxx.se libcurl c libcurl errors.html)

上記のサイトによると
・https://curl.haxx.se/ca/cacert.pemから証明書をDLして保存
・php.iniに設定して再起動 Finish!
でOKとのこと。
php.iniを編集し、サーバを再起動して各アイコンの挙動を確認します。

LINE:エラー
⇒emailが返ってこなかったので。LINE側の設定で何とかできそうなので放置。
emailが返ってこなかった時の対処は考えておこう。

Twitter:成功!

Google:エラーのち成功、でもやっぱり・・・?
⇒まずは失敗について。どうやらlocalhostが良くないみたい。
ngrokを使用することで、成功したことを確認。
ngrokについては、公式サイトをどうぞ ⇒ ngrok – secure introspectable tunnels to localhost

⇒ngrokを使用することで解決はしたけども、よくよく調べると、
Google+ APIを使用していることが判明。これはちょっとまずい。
composer require socialiteproviders/googleでインストールされるのは
Google+用のものみたいです。
ソースをちょいちょいっと改造したら解決しそうな雰囲気なので
それは後日やるってことで、今回はおしまい。


まとめ

ウソみたいなコードの少なさでSNS認証ができます。
SocialiteProviderにはさまざまなサービス用のものが用意されています。
Yahooとか、Youtubeとか、LinkedInとか、Facebookとか、Weiboなんかも。
これは使うしかないですね。

R.TANAKAがお届けしました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です