読者です 読者をやめる 読者になる 読者になる

tanaka's Programming Memo

プログラミングについてのメモ。

Laravel5.3でSentinelを利用する(2)MiddlewareをSentinelに対応させる

PHP Laravel Sentinel

前へ | 次へ

LaravelとSentinel、Codeceptionのインストールが完了したら、次にMiddlewareをSentinelに対応させます。


はじめに

ログインなどの処理の流れは Laravel に組み込まれています。そこにSentinel用のGuardを組み込んで対応させます。

Laravelの認証は、 Guard と Provider によって実行されます。 Guard とは、ユーザーが認証済みかを判定する方法を定義するもので、 Provider は、ユーザーの情報をEloquentやデータベースなどから取り出す方法を定義するものです。

Sentinel用のこれらを作成して公開してくれていましたので、これを利用します。
GitHub - joshwhatk/sentinel-guard: Laravel Guard for Cartalyst's Sentinel

ライセンスは MIT License です。

必要なプログラムを組み込む

  • GitHub - joshwhatk/sentinel-guard: Laravel Guard for Cartalyst's Sentinel をWebブラウザーで開く
  • ウィンドウの右にある[Clone or download]をクリックして、[Download ZIP]を選択
  • ダウンロードが完了したら、ファイルを解凍する
  • Laravelのプロジェクトフォルダー内に、 app/Joshwhatk/Cent フォルダーを作成
  • 解凍したフォルダー内の src の中にある [Cent.php][CentServiceProvider.php][UserModel.php]の3つのファイルをコピーして、作成した app/Joshwhatk/Cent フォルダーに貼り付ける
  • composer.json をエディターで開く
  • "autoload"の"psr-4"の定義を以下のように修正
        "psr-4": {
            "App\\": "app/",
            "Joshwhatk\\Cent\\": "app/Joshwhatk/Cent/"
        }

以上で必要なファイルの組み込みができました。解凍したフォルダーなどは削除しても構いません。

Cent.php を5.3に対応させる

現状のままだと、いくつか機能が足りません。 GuardHelpersトレイトを Cent.php に組み込んで対応します。

  • app/Joshwhatk/Cent/Cent.php をエディターで開く
  • ファイルの上の方に、以下の use 文を追加
use Illuminate\Auth\GuardHelpers;
  • クラスの宣言内に、以下のトレイトの呼び出しを追加
    use GuardHelpers;

ユーザーモデルを作成

Sentinel のデータベースに対応したユーザーモデルを用意して、認証に組み込むための機能も追加します。

  • app/User.php をエディターで開く
  • 以下のようにコードを修正
<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Joshwhatk\Cent\UserModel;

class User extends UserModel
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'email',
        'password',
        'name',
        'permissions',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
    ];
}

サービスプロバイダーを登録

  • config/app.php をエディターで開く
  • $providers 配列に、以下を追加
        Joshwhatk\Cent\CentServiceProvider::class,

作成した cent という名前の Guard を設定する

  • config/auth.php を開く
  • 'guards' の定義の 'driver' を以下のように全て cent に変更する
    'guards' => [
        'web' => [
            'driver' => 'cent',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'cent',
            'provider' => 'users',
        ],
    ],

設定を反映させる

以上、設定した内容を環境に反映させます。

  • ターミナルで以下を実行して、 composer を再構成する
composer update
  • php artisan serve でサービスを起動しているターミナルで、[control]+[C]を押して、サービスを停止
  • 改めて以下をターミナルで実行して、サービスを再開させる
php artisan serve

以上で、認証のための auth ミドルウェア が Sentinel に対応しました。 http://localhost:8000 を再読み込みして、正常に表示されることを確認してください。また、 npm test も成功します。

次は、ユーザー登録を実装します。



前へ | 次へ