【Laravel5.8】Auth認証でメールアドレス以外を利用する方法

LaravelのAuth認証はコマンド一つで簡単に実装できます。

デフォルトだとメールアドレス+パスワードでログインできるのですが、案件によってはログインID+パスワードにしたい場合があります。

今回はLaravel5.8のAuth認証でメールアドレス以外を利用する方法を紹介します。

DB関連を編集

まずは普通にコマンドラインでAuth認証に必要なファイルを生成します。

$ php artisan make:auth

必要なファイルが出来上がったら、Userテーブルを生成するマイグレーションファイルを編集します。

/database/migration/ディレクトリにxxxxxxxx(文字列)_create_users_table.phpが生成されているので、それを編集。

今回はログインにemail(メールアドレス)ではなく、login_idフィールドをログインを使うので、emailをlogin_idに変更します。

public function up(){
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        //emailの代わりにlogin_idを設定
        $table->string('login_id')->unique(); 
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

マイグレーションファイルを編集したら、Userモデルの編集を行います。

appディレクトリにUser.phpが作成されているので、そのファイルを編集。

$fillable変数の配列内を修正します。
emailをlogin_idに変更しましょう。

class User extends Authenticatable
{
    ・
    ・
    ・
    //emailをlogin_idに変更
    protected $fillable = [
        'name', 'login_id', 'password',
    ];
}

コントローラーを編集

まずは、ログイン用のコントローラーを編集します。

/app/Http/Controllers/Auth/LoginController.phpのクラス内にusername()関数を追加します。

returnの値を’login_id’にします。

class LoginController extends Controller
{
     ・
    ・
    ・
    ・
    //LoginControllerクラス内にusername()を追記 
    public function username()
    {
        //ログインに使うフィールド名を設定する
        return 'login_id';
    }
}

続いて、アカウントの追加画面(新規追加画面)に利用されるコントローラーを編集します。

/app/Http/Controllers/Auth/RegisterController.phpの関数「validator」と「create」を編集します。

validator関数はemailをlogin_idに変更して、以下のルールを設定します。

  • 必須(required)
  • 文字列(string)
  • 最小8文字(min:8)
  • 最大12文字(max:12)
  • 半角英数字(alpha_num)
  • ユニーク(unique)

create関数はemailをlogin_idに変更します。

class RegisterController extends Controller
{
     ・
    ・
    ・
    ・
    /**
     * 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'],
            //8~12文字の半角英数字のみ認める。
            'login_id' => ['required', 'string', 'min:8','max:12','alpha_num','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 User::create([
            'name' => $data['name'],
            'login_id' => $data['login_id'],
            'password' => Hash::make($data['password']),
        ]);
    }
}

ビューの編集

ログイン用画面のビューを編集します。

/resources/views/auth/login.blade.phpの14行目あたりにあるメールアドレスに関する記述をlogin_idに変更します。
inputタグのtypeはtextにします。

<div class="form-group row">
    <label for="login_id" class="col-md-4 col-form-label text-md-right">{{ __('Login ID') }}</label>

    <div class="col-md-6">
        <input id="login_id" type="text" class="form-control @error('login_id') is-invalid @enderror" name="login_id" value="{{ old('login_id') }}" required autofocus>

        @error('login_id')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
        @enderror
    </div>
</div>

続いて、登録画面用のビューを編集します。

/resources/views/auth/register.blade.phpの28行目あたりにあるメールアドレスに関する記述をlogin_idに変更します。
inputタグのtypeはtextにします。

<div class="form-group row">
    <label for="login_id" class="col-md-4 col-form-label text-md-right">{{ __('Login ID') }}</label>

    <div class="col-md-6">
        <input id="login_id" type="text" class="form-control @error('login_id') is-invalid @enderror" name="login_id" value="{{ old('login_id') }}" required>

        @error('login_id')
            <span class="invalid-feedback" role="alert">
                <strong>{{ $message }}</strong>
            </span>
        @enderror
    </div>
</div>
created by Rinker
¥3,300 (2020/01/24 15:51:14時点 Amazon調べ-詳細)
created by Rinker
秀和システム
¥3,300 (2020/01/24 18:08:35時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください