#はじめに
シンプルなフォームベースの認証以外やったことがなかったので、Twitter認証を今回実装してみました。
実装の一連の手順をまとめましたので、参考になれば幸いです。
#環境構築
こちらの記事を参考にしてLaravel環境を構築しました。
【超入門】20分でLaravel開発環境を爆速構築するDockerハンズオン
Laravelのバージョン:8.10.0
#ログイン画面作成
こちらの記事を参考にしました
Laravel8 (laravel/ui)でのLogin機能の実装方法〜MyMemo
#Twitter認証
Socialiteを使って認証機能を実装していきます
##TwitterAPIの利用申請
まずは、Twitter APIの取得が必要になるので、Twitterの開発者ページから申請・APIトークン取得を行います。
取得方法はこちらの記事を参考にしました
すこしだけTwitterAPIの利用申請が楽になった件(2020年8月現在)
##Socialiteの設定
認証で必要なSocialiteというライブラリーをインストールします。
composer require laravel/socialite
ちなみにSocialiteが対応しているサービスはTwitter以外に下記も対応。
- Github
- Gitlab
- Bitbucket
インストールが終わったら、config/app.php
にprovideとaliasの設定をします。
'providers' => [
Laravel\Socialite\SocialiteServiceProvider::class,
],
'aliases' => [
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
]
次にTwitter認証情報をconfig/service.php
に設定します。
"twitter" => [
"client_id" => env("TWITTER_CLIENT_ID"),
"client_secret" => env("TWITTER_CLIENT_SECRET"),
"redirect" => env("CALLBACK_URL"),
]
.envファイルにTwitter利用申請で取得した情報を設定します。
TWITTER_CLIENT_ID=TwitterのApi Key
TWITTER_CLIENT_SECRET=TwitterのAPI Secret Key
CALLBACK_URL=コールバックURL
##ルーティングの変更
routes/web.php
にTwitterログインURL、TwitterコールバックURL、TwitterログアウトURLを追加します。
// TwitterログインURL
Route::get('auth/twitter', 'Auth\TwitterController@redirectToProvider');
// TwitterコールバックURL
Route::get('auth/twitter/callback', 'Auth\TwitterController@handleProviderCallback');
// TwitterログアウトURL
Route::get('auth/twitter/logout', 'Auth\TwitterController@logout');
##コントローラーの作成
php artisan make:controller Auth/TwitterController
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Socialite;
class TwitterController extends Controller
{
// Twitterログイン
public function redirectToProvider(){
return Socialite::driver('twitter')->redirect();
}
// Twitterコールバック
public function handleProviderCallback() {
try {
// ユーザー詳細情報の取得
$user = Socialite::driver('twitter')->user();
} catch (Exception $e) {
return redirect('auth/twitter');
}
return redirect('/');
}
// Twitterログアウト
public function logout(Request $request) {
Auth::logout();
return redirect('/');
}
}
##Bladeの編集
ログイン、ログアウト部分のURLを変更します。
<a href="/auth/twitter">ログイン</a>
<a href="/auth/twitter/logout">ログアウト</a>
#参考
・【超入門】20分でLaravel開発環境を爆速構築するDockerハンズオン
・Laravel8 (laravel/ui)でのLogin機能の実装方法〜MyMemo
・すこしだけTwitterAPIの利用申請が楽になった件(2020年8月現在)
・LaravelでTwitterログインを実装する