Laravel ではコンソールで、
php artisan make:authとするだけで管理画面を作ることができますが、初期状態ではメールアドレスとパスワードを使ってログインする構造になっています。そこで、メールアドレスだけでなくログインIDでもログインできるように改造します。
今回使用するバージョンは 5.6 です。
まずはデータベースのテーブル users にログインIDを保存するためのカラム login を追加します。
マイグレーションを行う場合は次のようになります。
CreateUsersTable
public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('login')->unique(); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); }
ログイン名は重複のないもので、英数字が入るものとします。ここではシーディングでユーザーを追加します。
php artisan make:seeder UsersTableSeeder
public function run() { DB::table('users')->insert([ 'name' => 'User 1', 'login' => 'user1', 'email' => 'user1@example.com', 'password' => bcrypt('secret') ]); }
ログインに関係する処理は App\Http\Controllers\Auth\LoginController に書かれています。
実際には Illuminate\Foundation\Auth\AuthenticatesUsers の内容をオーバーライドしているだけなので AuthenticatesUsers の中身を見て動きを調べ、LoginController に実装することで上書きします。
追加するメソッドは次の2つです。「use Illuminate\Http\Request;」を上部に追記するのを忘れないで下さい。
public function username() { return 'login'; } protected function attemptLogin(Request $request) { $username = $request->input($this->username()); $password = $request->input('password'); if (filter_var($username, \FILTER_VALIDATE_EMAIL)) { $credentials = ['email' => $username, 'password' => $password]; } else { $credentials = [$this->username() => $username, 'password' => $password]; } return $this->guard()->attempt($credentials, $request->filled('remember')); }
ログインフォームから login の入力値を受け取り、メールアドレスであれば email を調べ、そうでなければ login を調べてログインする仕組みです。
input の name を変更したのでビューも修正します。場所は resources/views/auth/login.blade.php です。
<div class="form-group row"> <label for="login" class="col-sm-4 col-form-label text-md-right">{{ __('Username / E-Mail Address') }}</label> <div class="col-md-6"> <input id="login" type="text" class="form-control{{ $errors->has('login') ? ' is-invalid' : '' }}" name="login" value="{{ old('login') }}" required autofocus> @if ($errors->has('login')) <span class="invalid-feedback"> <strong>{{ $errors->first('login') }}</strong> </span> @endif </div> </div>
email となっていた箇所を login に置き換えました。type は text に変更となります。
これでメールアドレス、ログインIDのどちらでもログインできるようになります。
Similar Posts:
- [PHP]Laravelを使ったメールフォームの作り方
- [PHP]Symfonyを使ったメールフォームの作り方
- [PHP]Symfony 4 とデータベースを使ったCRUDアプリケーションの作り方
- [PHP]Silexの基本的なルーティング方法とTwigによるビューの作り方
- [PHP]PDOを使ったMySQLデータベースへの接続と基本操作
- [PHP, JS]jQueryのAjaxによるPHP、Javascript間の送受信(JSON)
- [PHP][jQuery]Ajax(非同期通信)を使ったチャット
- [PHP]LaravelでBladeテンプレートの読み込み元を一時的に変更する