73
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LaravelでTwitterログインを実装する

Last updated at Posted at 2018-11-01

はじめに

Laravelでアニメの聖地の写真を共有するサイトを作ったのですが、サイトへのログインとしてTwitterログイン機能を利用したので方法を書いていきたいと思います。

作ったサイトはこちらです。 

右上のログインから試せます。

前提

  • Laravel version 5.6
  • Twitter Developerの登録済み

Socialiteの設定

TwitterログインはSocialiteというライブラリを利用します。

まずはインストール。

composer require laravel/socialite

インストール後はconfig/app.phpにprovidersとaliasの設定をします。

config/app.php
'providers' => [ 
    Laravel\Socialite\SocialiteServiceProvider::class,
],
'aliases' => [
    'Socialite' => Laravel\Socialite\Facades\Socialite::class,
]

次に、config/services.phpにTwitterのトークンなどを設定します。

値は適宜変更してください。

config/services.php
"twitter" => [
    "client_id" => env("TWITTER_CLIENT_ID"),
    "client_secret" => env("TWITTER_CLIENT_SECRET"),
    "redirect" => env("CALLBACK_URL"),
]
.env
TWITTER_CLIENT_ID = TwitterのApi Key
TWITTER_CLIENT_SECRET = TwitterのAPI Secret Key
CALLBACK_URL = コールバックURL

Laravel

設定が完了したら次はルーティングを実装していきます。

routes/web.phpにログインURLとコールバックURLとログアウトURLを足します。

このコールバックURLはconfig/services.phpで利用するコールバックURLと同じです。

routes/web.php
// ログインURL
Route::get('auth/twitter', 'Auth\TwitterController@redirectToProvider');
// コールバックURL
Route::get('auth/twitter/callback', 'Auth\TwitterController@handleProviderCallback');
// ログアウトURL
Route::get('auth/twitter/logout', 'Auth\TwitterController@logout');

コントローラーはログイン、コールバック、ログアウトを実装します。

Socialite::driver('twitter')->user();で返ってくるオブジェクトはTwitterのアカウント名や、画像URLなどなどかなり多くの情報を持っています。

例で書いているのはLaravelの標準の認証機能を使っています。

TwitterController.php
<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Socialite;

class TwitterController extends Controller
{

    // ログイン
    public function redirectToProvider(){
        return Socialite::driver('twitter')->redirect();
    }

    // コールバック
    public function handleProviderCallback(){
        try {
            $twitterUser = Socialite::driver('twitter')->user();
        } catch (Exception $e) {
            return redirect('auth/twitter');
        }
        // 各自ログイン処理
        // 例
        // $user = User::where('auth_id', $twitterUser->id)->first();
        // if (!$user) {
        //     $user = User::create([
        //         'auth_id' => $twitterUser->id
        //   ]);
        // }
        // Auth::login($user);
        return redirect('/');
    }

    // ログアウト
    public function logout(Request $request)
    {
        // 各自ログアウト処理
        // 例
        // Auth::logout();
        return redirect('/');
    }
}

ビュー側は単純で、各URLに遷移させるだけで大丈夫です。

<a href="/auth/twitter">ログイン</a>
<a href="/auth/twitter/logout">ログアウト</a>

終わりに

Twitter Developerの登録が英語で行う必要があり、そこに苦労したくらいで

Laravel側の実装は簡単でした。

SocialiteはTwitterの他にも、Facebook、LinkedIn、Google、GitHub、Bitbucketをサポートしているので、他のも試してみようと思います。

73
54
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
73
54

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?