15
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravel開発:2.ユーザ認証と管理画面を作成する

Last updated at Posted at 2018-10-01

こちらの内容はブログにアップしています。

はじめに

https://ksysnote.com/php/laravel-mamp-setup/

こちらの続きとなっています。

ユーザと管理者で認証を分けるために、ユーザの管理テーブルとして「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' =&gt; [
    
    ...

    // 新しく認証ガードを追加します
    'clients' =&gt; [
        'driver' =&gt; 'session',
        'provider' =&gt; 'clients',
    ],
],

// 認証プロバイダー
'providers' =&gt; [

    ...

    // 新しく認証プロバイダーを追加します。
    'clients' =&gt; [
        'driver' =&gt; 'eloquent',
        'model' =&gt; App\Client::class,
    ],
],

// 認証パスワード
'passwords' =&gt; [

    ...

    //password追加
    'clients' =&gt; [
        'provider' =&gt; 'clients',
        'table' =&gt; 'password_resets',
        'expire' =&gt; 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 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/

 

15
24
1

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
15
24

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?