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>



コメント