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>
コメント