Laravel で Tumblr API のアクセストークンを取得するプログラムを動かしたときのメモ
検証環境
$ php --version PHP 7.1.4 (cli) (built: May 11 2017 17:22:31) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies $ php artisan --version Laravel Framework 5.4.33
OAuth パッケージについて
今回は Laravel5 対応の以下のパッケージを使用します
github.com
oriceon/oauth-5-laravel のインストール
composer.json の require セクションに下記内容を追加
"require": { "oriceon/oauth-5-laravel": "dev-master" }
その後 composer update でインストール
$ composer update
config/app.php を下記のように変更してパッケージを登録
--- config/app.php.orig Fri Aug 18 12:25:23 2017 +++ config/app.php Wed Aug 16 16:55:38 2017 @@ -177,6 +177,11 @@ App\Providers\EventServiceProvider::class, App\Providers\RouteServiceProvider::class, + /* + * OAuth + */ + Artdarek\OAuth\OAuthServiceProvider::class, + ], /* @@ -212,6 +217,7 @@ 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, + 'OAuth' => Artdarek\OAuth\Facade\OAuth::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class,
以下の内容で config/oauth-5-laravel.php を作成
<?php return [ /* |-------------------------------------------------------------------------- | oAuth Config |-------------------------------------------------------------------------- */ /** * Storage */ 'storage' => '\\OAuth\\Common\\Storage\\Session', /** * Consumers */ 'consumers' => [ 'Tumblr' => [ 'client_id' => env('TUMBLR_CLIENT_ID'), 'client_secret' => env('TUMBLR_CLIENT_SECRET'), // No scope - oauth1 doesn't need scope ], ] ];
.env に Consumer Key, Consumer Secret を追加
TUMBLR_CLIENT_ID=Your-Consumer-Key TUMBLR_CLIENT_SECRET=Your-Consumer-Secret
OAuth 認証プログラム
app/Http/Controllers/TumblrAuthController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class TumblrAuthController extends Controller { public function loginWithTumblr(Request $request) { // get data from request $token = $request->get('oauth_token'); $verify = $request->get('oauth_verifier'); // get tumblr service $tmb = \OAuth::consumer('Tumblr'); // check if code is valid // if code is provided get user data and sign in if ( ! is_null($token) && ! is_null($verify)) { // This was a callback request from tumblr, get the token $token = $tmb->requestAccessToken($token, $verify); //Var_dump //display whole array. dd($token); } // if not ask for permission first else { // get request token $reqToken = $tmb->requestRequestToken(); // get Authorization Uri sending the request token $url = $tmb->getAuthorizationUri(['oauth_token' => $reqToken->getRequestToken()]); // return to tumblr login url return redirect((string)$url); } } }
routes/web.php
<?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/tumblr', 'TumblrAuthController@loginWithTumblr');
OAuth 認証プログラムの実行
以下のコマンドで開発用サーバーが起動します
$ php artisan serve
web ブラウザで http://127.0.0.1:8000/tumblr にアクセスします
途中、以下の画面が表示されたときは Allow をクリックします
web ブラウザに以下のような Access Token の表示が出れば成功です
StdOAuth1Token {#175 ▼ #requestToken: "xxxxx...." #requestTokenSecret: "xxxxx..." #accessTokenSecret: "xxxxx..." #accessToken: "xxxxx..." #refreshToken: null #endOfLife: -9002 #extraParams: [] }