PHP
Laravel
JWT
laravel5

Laravel5でJWT+Twitter OAuthの認証機能をつくる 1/3

More than 1 year has passed since last update.

認証機能のある、APIサーバーを作ろうとしたときにJWT(Json Web Token)という仕組みが使えそうだったので、

Laravel5で実装してみました。

Laravel5でJWT+Twitter OAuthの認証機能をつくる 1/3 ← いまここ

Laravel5でJWT+Twitter OAuthの認証機能をつくる 2/3

Laravel5でJWT+Twitter OAuthの認証機能をつくる 3/3


その1ということでJWTを使う準備まで説明します。


使用するもの

Laravel5(Homestead)

jwt-auth

https://github.com/tymondesigns/jwt-auth

oauth-5-laravel

https://github.com/oriceon/oauth-5-laravel


まずはLaravel5を動かす

まずはLaravel5が動く環境をさくっと作ります。

以前に書いた記事にLaravel5が動くまでの環境構築の手順を書いたのでよければ参考にしてください。

HomesteadをつかってLaravel5を動かしてみる

無事Laravelが動いたら本題のjwt-authに入ります。


jwt-authを使ってみる

https://github.com/tymondesigns/jwt-auth


composerでインストール

requireにjwt-authを追加する


composer.json



'require' {
"tymon/jwt-auth": "0.5.*",
}

その後homestead ssh でログインして、composer updateでインストール

$ homestead ssh

$ composer update


app.phpに追記

LaravelからJWTAuthが使えるように、設定ファイルに追記する

providersに末尾に以下のように追記します。


app.php

providers [

/*
* JWTAuth
*/

Tymon\JWTAuth\Providers\JWTAuthServiceProvider::class
],

aliasesにも以下のように追記


app.php

aliases [

'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory'=> Tymon\JWTAuth\Facades\JWTFactory::class
],


設定ファイル外だし

以下のコマンドを入力して、設定ファイルを/config配下に移す

$ php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

実行すると、自分の環境だと config/jwt.php という設定ファイルができます。

通常はvendor配下に設定ファイルができるので、configに移しておくと便利です。


Middlewareの追加

app/Http/Kernel.phpにMiddlewareの設定をします。

20行目をコメントアウト

21行目に\App\Http\Middleware\EnableCors::classを追加

※EnableCorsはクロスオリジンを許可するためのものなので、今回動かすだけならいらないと思います。

33, 34行目に以下を追加

'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,

'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class

以下ファイル全体


app/Http/Kernel.php

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* @var array
*/

protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
// \App\Http\Middleware\VerifyCsrfToken::class, // ここコメントアウト
\App\Http\Middleware\EnableCors::class, // ここ追加
];

/**
* The application's route middleware.
*
* @var array
*/

protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class, // ここ追加
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class // ここ追加
];
}



秘密鍵の設定

Json Web Tokenの暗号、複合に用いる秘密鍵を生成し、設定します。

homestead ssh でログインした後に、以下コマンドで鍵生成

$ php artisan jwt:generate


DB設定

usersテーブルはデフォルトで入っているものを使います。

後にテストするために仮データを入れます。

例のごとく homestead ssh でログインし、プロジェクトのあるディレクトリに移動しておきます

まずは、usersテーブルをマイグレート

$ php artisan migrate

これでデフォルトのusersテーブルができます。

次にartisan tinkerでユーザーの仮データを作成します

後、下記コマンドでphpのシェルに入ります。

$ php artisan tinker

シェルに入ったら以下のコマンドでユーザを作成します

$ App\User::create(['email'=>'jwt-test@example.com', 'name'=>'jet-test', 'password'=>bcrypt('password')]);

emailが"jwt-test@example.com"、passwordが”password"

のユーザーができます。

準備編ということで、とりあえずここまで。


次回

実際にコーディングをして、JWTの動作確認ができるところまでを書こうと思います。


参考にさせていただいたサイト様

https://github.com/tymondesigns/jwt-auth/wiki/Installation

http://arito-works.com/blog/laravel5%E3%81%A7json-web-tokenjwt%E3%82%92%E3%81%A4%E3%81%8B%E3%81%A3%E3%81%9F%E8%AA%8D%E8%A8%BC%E3%81%AB%E4%BE%BF%E5%88%A9%E3%81%AA%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AAjwt-auth%E3%82%92/

http://www.toptal.com/web/cookie-free-authentication-with-json-web-tokens-an-example-in-laravel-and-angularjs