2
1

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 3 years have passed since last update.

Laravel7 auth ユーザー登録 まとめ

Posted at

#環境
macOS (10.15.4)

Laravel 7.10.2
PHP 7.4.2
MySQL 5.7.26
Apache 2.2.34

#はじめに
laravelのauth認証を用いて、usersテーブルから私が作成したaccountsテーブルでの認証に変更しようと試みたら結構ハマったのでまとめておく。

#デフォルト機能

laravel7ではまず、laravel/uiをインストールする必要がある。そして、用意されている認証機能を作成する。

composer require laravel/ui
php artisan ui vue --auth

#accountsテーブル
私が認証に利用したテーブルを以下に示す。
スクリーンショット 2020-05-15 8.54.55.png

初めに作成したaccountsテーブルにはremember_tokenカラムのデフォルト値を用意していなかったので、新しくマイグレーションファイルを作成して変更しようとしたところ,
php artisan migrate が実行されないエラーが生じた。

原因を調べてみると、composer で “doctrine/dbal” パッケージを追加する必要があるらしい。そのため、以下のコマンドを実行した。

composer require doctrine/dbal

これで、migrateでカラムの型を変更することができた。

#auth.phpの修正
accountsテーブルで認証するために、いくつか追記、修正する必要がある。

<?php

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'accounts',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'accounts',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'accounts',
            'hash' => false,
        ],
    ],

    'providers' => [
        'accounts' => [
            'driver' => 'eloquent',
            'model' => App\Models\Account::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
        'accounts' => [
            'provider' => 'accounts',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    'password_timeout' => 10800,

];

#Modelの修正
次にModelの修正をした。追加するカラムだけ追加する必要がある。

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\user as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Account extends Authenticatable
{
    //
    use Notifiable;
    
    /**
     * The attributes that are mass assignable.
     * 
     * @var array
     */
    protected $fillable = [
        'name',
        'email', 
        'password',
        'register_date',
        'delete_date',
        'delete_fg',
    ];



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

    /**
     * The attributes that should be cast to native types.
     * 
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

}

#Controllerの修正
AuthディレクトリのRegisterControllerの中を以下のように修正する。インサート時に、ユーザーの入力以外のデータを必要とする場合は、デフォルト値を用意する必要がある。

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\User;
use App\Models\Account;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

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 = RouteServiceProvider::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:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return Account::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
            'register_date' => date("Y-m-d"),
            'delete_date' => null,
            'delete_fg' => 0,
            'remember_token' => null,
        ]);
    }
}

これで、無事にaccountsテーブルにuserを登録することができた。

2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?