[Laravel] Auth ログインを email から name に変更する

ITLaravel, PHP

こんにちは、ハラダ(@nobuhiro_harada)です。

Laravel Auth を利用する際、、、

php artisan make:auth
php artisan migrate

これで利用できますが、このままだと、認証キーが email なので、これを name に変更してみました。

※移行やお客様要望などやむを得ない場合以外は email をそのまま使う方がいいと思います。

View の修正

まずは、Login.blade.php の email の箇所を name に変更します。

resources/views/auth/login.blade.php

<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
    <label for="name" class="col-md-4 control-label">Name</label>

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

        @if ($errors->has('name'))
            <span class="help-block">
                <strong>{{ $errors->first('name') }}</strong>
            </span>
        @endif
    </div>
</div>

Controller の修正

LoginController.php では トレイト AuthenticatesUsers を use しています。
username メソッドで email を指定しているので、これを LoginController でオーバーライドして、name に指定します。

/vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

/**
 * Get the login username to be used by the controller.
 *
 * @return string
 */
public function username()
{
    return 'email';
}

username メソッドを追加してやります。
app/Http/Controllers/Auth/LoginController.php

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest')->except('logout');
}

public function username()
{
    return 'name';
}

さらに、RegisterController.php のバリデーション で unique:users を設定している箇所を email から name に変更します。

app/Http/Controllers/Auth/RegisterController.php

/**
 * 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|unique:users',
        'email' => 'required|string|email|max:255',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

migration の修正

デフォルトでは email カラムにユニークキーが設定されているので、name に変更します。

database/migrations/2014_10_12_000000_create_users_table.php

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique();
        $table->string('email');
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });
}

これで、name でログインすることができ、またname が重複することを防げます。

ひとこと

Laravel、PHPに関しては当ブログでは初投稿。去年Laravelをよく扱っていて、それからしばらく手が離れていたのですが、実装に関してググりますと去年より日本語での情報がヒットする印象です。RailsやCakePHPに押されていた印象だったのですが、いよいよ日本でもLaravelが来る?

スポンサーリンク

Posted by nobuhiro harada