はじめに
こちらの続きとなっています。
ユーザと管理者で認証を分けるために、ユーザの管理テーブルとして「clients」を追加しています。
管理画面は「 Voyager」を使用しています。
環境:
OS : macOS High Sierra 10.13.6
MAMP : 5.1
Laravel : 5.7.6
DB設定
MAMPを実行するとMAMPのTop画面が表示されます。その中にMySQLの設定情報が表示されています。
こちらの「phpMyAdmin」のリンクからphpMyAdminを表示してプロジェクトで使用するデータベースを作成します。
データベースを作成したら「.env」を編集します。
APP_URL=http://localhost:8888 // MAMPで設定されているPORTに変更 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=8889 DB_DATABASE=laravel // DB名 DB_USERNAME=root DB_PASSWORD=root
ユーザ認証
認証機能を追加する
Laravel標準の認証機能を追加する
$ php artisan make:auth
ユーザーのモデルを作成
ユーザーはClientテーブルに管理して、標準のusersテーブルは管理者で管理していきます。
php artisan make:model Client -m
「/database/migrations」ディレクトリにマイグレーションファイルが作成されています。DATE_TIME_create_users_table.php の内容を DATE_TIME_create_clients_table.php にコピーします。
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateClientsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('clients', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('clients'); } }
マイグレーション
$ php artisan migrate
phpmyAdminで確認するとテーブルが作成されていることを確認することができます。
認証するテーブルをusersからclientsに変更をする
「/config/auth.php」
// デフォルトの認証ガード 'defaults' => [ // 認証ガードを変更する。guardとpasswordsの設定は以下に記述します 'guard' => 'clients', 'passwords' => 'clients', ], // 認証ガード 'guards' => [ ... // 新しく認証ガードを追加します 'clients' => [ 'driver' => 'session', 'provider' => 'clients', ], ], // 認証プロバイダー 'providers' => [ ... // 新しく認証プロバイダーを追加します。 'clients' => [ 'driver' => 'eloquent', 'model' => App\Client::class, ], ], // 認証パスワード 'passwords' => [ ... //password追加 'clients' => [ 'provider' => 'clients', 'table' => 'password_resets', 'expire' => 60, ], ],
・デフォルトの認証ガードを今回新しく追加した「Client」に変更しています。
RegisterControllerの編集
アカウント追加時の処理をClientに変えるために、「RegisterController」を編集します。
「/app/Http/Controller/Auth/RegisterController.php」
//use App\User; use App\Client; ... class RegisterController extends Controller { ... protected function validator(array $data) { return Validator::make($data, [ 'name' => 'required|string|max:255', // メールアドレスのユニークをclientテーブルに変更 'email' => 'required|string|email|max:255|unique:clents', 'password' => 'required|string|min:6|confirmed', ]); } ... protected function create(array $data) { // モデルを変更 return Client::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => Hash::make($data['password']), ]); } }
Clientモデルの編集
Userモデルを参考に、Clientモデルを編集していきます。
「/app/Client.php」
<?php namespace App; use Illuminate\Notifications\Notifiable; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; class Client extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; }
確認
「http://localhost:8888/home」にアクセスするとログイン画面が表示されます。
右上の「Register」メニューをクリックして登録画面からユーザを追加します。
無事にログインができたら完了です
管理画面
続いて管理画面を作成していきます。今回はVoyagerを使用して簡単に管理画面を実装していきたいと思います。
Voyagerのインストール
コマンドからVoyagaerをインストールします。
$ composer require tcg/voyager $ php artisan voyager:install
セッションクッキーを管理画面とユーザで分ける
「/app/.env」
//追記 SESSION_COOKIE=auth SESSION_COOKIE_ADMIN=auth-admin
「/config/session.php」
<?php $conf = [ ... ]; // 管理画面のセッションクッキーを変更する $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; if (strpos($uri, '/admin/') === 0 || $uri === '/admin') { $conf['cookie'] = env( 'SESSION_COOKIE_ADMIN', str_slug(env('APP_NAME', 'laravel'), '_').'_admin_session' ); } return $conf;
管理画面の認証ガードを変更する
「/config/auth.php」
<?php $conf = [ ... ]; // 管理画面の場合は、デフォルトの認証ガードをuserに変更する $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : ''; if (strpos($uri, '/admin/') === 0 || $uri === '/admin') { $conf['defaults'] = [ 'guard' => 'web', 'passwords' => 'users', ]; } return $conf;
管理者アカウントを追加する
$ php artisan voyager:admin [email protected] --create Enter the admin name: > admin Enter admin password: > Confirm Password: > Creating admin account The user now has full access to your site.
コマンドから管理者アカウントを追加します。
確認
「http://localhost:8888/admin」
管理画面が表示されて、先程追加した管理者アカウントでログインができたら完了です。
ユーザーの管理
管理画面にログインしてサイドメニューの「Tools > Database」からテーブルの管理ができそうです。
一覧からclientsの「Add BREAD to this table」をクリックしてBREADを追加します。
編集画面が表示されるので、一番下までスクロールして「Submit」をクリックします。
ユーザー情報が一覧で見れるようになります。
コメント