こちらの内容はブログにアップしています。
はじめに
https://ksysnote.com/php/laravel-mamp-setup/こちらの続きとなっています。
ユーザと管理者で認証を分けるために、ユーザの管理テーブルとして「clients」を追加しています。
管理画面は「 Voyager」を使用しています。
環境:
OS : macOS High Sierra 10.13.6MAMP : 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
<?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
認証するテーブルを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,
],
],
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
<?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 admin@example.com --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」をクリックします。 ユーザー情報が一覧で見れるようになります。参考:
https://tac-blog.tech/index.php/2018/08/14/voyager-multi-auth/