認証用のusersテーブルを変更する

どう考えても足りないカラムとプレフィックスのないテーブルはきついので改変します。

テーブル名の変更

元々あるAuthの機能は勿体無いので使うとして、テーブル名を他と統制が取れるように変更します。変更するというより新規で作成してAuth用のテーブルにしてしまう感じです。
artisanコマンドでマイグレーションを実行します。面倒なのでモデルも作成します。

php artisan make:model MODELNAME --m

ちなみにここではモデルを作成するついでにマイグレーションファイルの作成ということなのでモデル名(単数形)を指定します。

app/uo_user.php
database/migrations/2017_09_12_155108_create_uo_users_table.php

という風にモデルファイルとマイグレーションファイルが作成されます。

マイグレーションファイルにカラム設定

お好みのカラム設定をします。が、既存のAuth機能は使いたいので既存のカラムは踏襲します。

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUoUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('uo_users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name', 128);
            $table->string('password', 256);
            $table->string('email');
            $table->string('uniqeid', 64);
            $table->string('uniqehash', 64);
            $table->rememberToken();
            $table->integer('count');
            $table->integer('active');
            $table->integer('role');
            $table->unsignedTinyInteger('delflag');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('uo_users');
    }
}

マイグレーション実行

$ php artisan migrate
Migrating: 2017_09_12_155108_create_uo_users_table
Migrated:  2017_09_12_155108_create_uo_users_table

認証用のテーブルの準備はこれでOK

認証用テーブルに紐付ける

Laravelのデフォルトのusersテーブルを新規で作成したものに差し替えます。これが結構面倒くさい。手続き型プログラミングのおもしろくないところです。
MVCのC部分の調整になります。下からいくか上からいくかというところですが、データベースから作成したので下からいきます。

Model

まずは既存のapp/User.phpに先程作成したテーブル名を指定しなおします。traitから呼び出すモデル自体を変更するのものよいのですが、Vendorはあまり触りたくないといったところです。
もう1つは、データインサート時のホワイトリストかブラックリストをカラム指定してあげます。
fillableとguardedの指定はどちらかだけでいい
どのカラムに何を入れるのかという意味では主キーになるidとか更新日・作成日なんかはgurded、それ以外はfillableって感じになるでしょうか。
またヴァリデーションを通ってくる値はどっちにもいれなくてもいいみたいです。

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * モデルと関連しているテーブル
     *
     * @var string
     */
    protected $table = 'uo_users';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
//        'name', 'email', 'password',
        'uniqehash','uniqeid','name','email','password','count','active','role','delflag',
    ];

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

これでモデルを通ってよしなにしてくれます。

Controller

app/Http/Controllers/Auth/RegisterController.phpでvalidator()とcreate()というメソッドがあるので、入力する値をそこで処理してあげます。デフォルトではusersテーブルに情報を入力する前提なので、オリジナルで作成したテーブルのカラムに合わせてあげればいいです。
当然のことではありますが、validatorを通ってからcreate()に行きます。

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:uo_users',
            'password' => 'required|string|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {

        /**
         * 入力データの準備
         *
         *
         */
        $data['uniqeid'] = "1";
        $data['count'] = 1;
        $data['active'] = 1;
        $data['role'] = 1;
        $data['delflag'] = 0;
        $data['uniqehash'] = "1";
        /**
         * フィールドの追加は、このreturnの部分とmodelにカラム追加します。
         *
         *
         *
        */
        return User::create([
            'uniqeid' => $data['uniqeid'],
            'uniqehash' => $data['uniqehash'],
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
//            'remember_token' => "",
            'count' => $data['count'],
            'active' => $data['active'],
            'role' => $data['role'],
            'delflag' => $data['delflag'],
        ]);
    }
}

増やしたカラムに入れるデータは自分で適当に作っていれる。あとは既存のLaravelシステムがやってくれます。

Laravelの登録には確認画面がない

ので、今度作ります。

Last update: 2017.09.14 (木)