LoginSignup
64

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-08-19

認証機能のある、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を使ってみる

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の動作確認ができるところまでを書こうと思います。

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

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
64