Laravel5.3でTwitterアプリを作る

noimage Laravel

Laravelでツイッターのアプリケーションを作るメモ

使用するライブラリはthujohn/twitter

基本的にはExamples通りに実装すればOAuth認証を行うことが出来るのですが、新しめのバージョンのLaravelだと一部詰まる部分がありました。

スポンサーリンク

ライブラリの追加

thujohn/twitterはcomposerで追加します。

composer require thujohn/twitter

を実行

ライブラリの追加後は/config/app.phpのprovidersとaliasesに以下を追加します。

'providers' => [
    'Thujohn\Twitter\TwitterServiceProvider',
]
'aliases' => [
    'Twitter' => 'Thujohn\Twitter\Facades\Twitter',
]

CONSUMER_KEYの設定

php artisan vendor:publish

でconfigフォルダー内にttwitter.phpが追加されます。
このファイル内にコンシューマーキーなどを追加するのですが.envファイルから読み込むようにするのがいいでしょう。

.envファイルから読み込ませる場合は.envファイルに

TWITTER_CONSUMER_KEY = コンシューマーキー
TWITTER_CONSUMER_SECRET = コンシューマーシークレット
TWITTER_ACCESS_TOKEN = アクセストークン
TWITTER_ACCESS_TOKEN_SECRET = アクセストークンシークレット

を必要に応じて追加します。

ルートの設定

ツイッターで認証を行うためにはログイン、コールバックのルートが最低限必要です。
ログアウトもあると良いでしょう。

Route::get('twitter/login', 'TwitterController@login')->name('twitter.login');
Route::get('twitter/callback', 'TwitterController@callback')->name('twitter.callback');
Route::get('twitter/logout', 'TwitterController@logout')->name('twitter.logout');

と/twitter/アクション名 でルートを作成しました。

コントローラの作成

ツイッターの機能は1つのコントローラーで管理したいので、ツイッター用のコントローラーを作成します。

php artisan make:controller TwitterController

app/Http/Controllers内にTwitterController.phpが作成されるのでこのファイルに処理を書いていきます。

Inputクラスを利用するのですが、新しめのバージョンのLaravelだとInputがファザードとして用意されていないのでクラスを直接指定します。
use Input; だとエラーが発生してちょっと困りました。

スポンサーリンク
use Illuminate\Support\Facades\Input;
public function login()
    {
        $sign_in_twitter = true;
        $force_login = false;

        // Make sure we make this request w/o tokens, overwrite the default values in case of login.
        Twitter::reconfig(['token' => '', 'secret' => '']);
        $token = Twitter::getRequestToken(route('twitter.callback'));

        if (isset($token['oauth_token_secret'])) {
            $url = Twitter::getAuthorizeURL($token, $sign_in_twitter, $force_login);

            Session::put('oauth_state', 'start');
            Session::put('oauth_request_token', $token['oauth_token']);
            Session::put('oauth_request_token_secret', $token['oauth_token_secret']);

            return Redirect($url);
        }

        return Redirect('twitter.error');
    }

    public function logout()
    {
         Session::forget('access_token');
          return Redirect('');
    }

    public function callback()
    {
        if (Session::has('oauth_request_token')) {
            $request_token = [
                'token'  => Session::get('oauth_request_token'),
                'secret' => Session::get('oauth_request_token_secret'),
            ];

            Twitter::reconfig($request_token);

            $oauth_verifier = false;

            if (Input::has('oauth_verifier')) {
                $oauth_verifier = Input::get('oauth_verifier');
            }

            // getAccessToken() will reset the token for you
            $token = Twitter::getAccessToken($oauth_verifier);

            if (!isset($token['oauth_token_secret'])) {
                return Redirect::route('twitter.login')->with('flash_error', 'We could not log you in on Twitter.');
            }

            $credentials = Twitter::getCredentials();

            if (is_object($credentials) && !isset($credentials->error)) {
                // $credentials contains the Twitter user object with all the info about the user.
                // Add here your own user logic, store profiles, create new users on your tables...you name it!
                // Typically you'll want to store at least, user id, name and access tokens
                // if you want to be able to call the API on behalf of your users.

                // This is also the moment to log in your users if you're using Laravel's Auth class
                // Auth::login($user) should do the trick.

                Session::put('access_token', $token);

                return Redirect::to('/')->with('flash_notice', 'Congrats! You\'ve successfully signed in!');
            }

            return Redirect('/');
        }
    }

こんな簡単にツイッターの認証が実装出来てしまうんですね。

もうサービスとしては末期に見えてしまうツイッターですが1つ2つくらいアプリを作ってみたいなと思います。

コメント

タイトルとURLをコピーしました