Laravel5標準装備の認証アプリのカスタマイズ

前回、Laravel5標準装備の認証アプリの使い方をご紹介しましたが、今回は、そのカスタマイズ法をご紹介します。

デフォルトの認証アプリは、Eメールアドレスとパスワードでのログイン仕様になっています。これを名前(name)とパスワードでログインするように変更してみたいと思います。

まず、ビューファイルのemailの箇所をnameに変更します。これは、特に説明する必要がないと思いますが、一応、下記にlogin.blade.phpを記述しておきます。

@extends('app')

@section('content')
<div class="container-fluid">
 <div class="row">
 <div class="col-md-8 col-md-offset-2">
 <div class="panel panel-default">
 <div class="panel-heading">ログイン</div>
 <div class="panel-body">
 @if (count($errors) > 0)
 <div class="alert alert-danger">
 <strong>おーっと!</strong> 入力値に間違いがあります。<br><br>
 <ul>
 @foreach ($errors->all() as $error)
 <li>{{ $error }}</li>
 @endforeach
 </ul>
 </div>
 @endif

 <form class="form-horizontal" role="form" method="POST" action="/auth/login">
 <input type="hidden" name="_token" value="{{ csrf_token() }}">

 <div class="form-group">
 <label class="col-md-4 control-label">お名前</label>
 <div class="col-md-6">
 <input type="text" class="form-control" name="name" value="{{ old('name') }}">
 </div>
 </div>

 <div class="form-group">
 <label class="col-md-4 control-label">パスワード</label>
 <div class="col-md-6">
 <input type="password" class="form-control" name="password">
 </div>
 </div>

 <div class="form-group">
 <div class="col-md-6 col-md-offset-4">
 <div class="checkbox">
 <label>
 <input type="checkbox" name="remember"> パスワードを記憶する
 </label>
 </div>
 </div>
 </div>

 <div class="form-group">
 <div class="col-md-6 col-md-offset-4">
 <button type="submit" class="btn btn-primary" style="margin-right: 15px;">
 ログイン
 </button>

 <a href="/password/email">パスワードをお忘れですか?</a>
 </div>
 </div>
 </form>
 </div>
 </div>
 </div>
 </div>
</div>
@endsection

※要は、27行目のnameの部分です。デフォルトでは、ここがemailになっていますので、emailになっている箇所をすべてnameに変更してください。

そして、AuthControllerに下記のようにpostLogin(16行目~31行目)を追加します。

<?php namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
 use Illuminate\Contracts\Auth\Guard;
 use Illuminate\Contracts\Auth\Registrar;
 use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
 use Illuminate\Http\Request;
class AuthController extends Controller {
use AuthenticatesAndRegistersUsers;

 public function __construct(Guard $auth, Registrar $registrar)
 {
 $this->auth = $auth;
 $this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
 }
public function postLogin(Request $request)
 {
$this->validate($request, [
 'name' => 'required', 'password' => 'required',
 ]);
$credentials = $request->only('name', 'password');
if ($this->auth->attempt($credentials, $request->has('remember')))
 {
 return redirect()->intended($this->redirectPath());
 }
return redirect($this->loginPath())
 ->withInput($request->only('name', 'remember'))
 ->withErrors([
 'name' => '資格情報が記録と一致しません。',
 ]);
}
}

※このAuthControllerは、AuthenticatesAndRegistersUsersトレイトを利用しています(8行目)ので、トレイトのpostLoginメソッドをオーバーライド(上書き)して、emailの部分をnameに変更しています。

6行目:Requestクラスをインポートしないとエラーになりますので、この1行も追加してください。

これで、nameカラムとpasswordカラムでの認証仕様に変更することができました。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ