2015年4月18日土曜日

PHP filter_var関数を使って、ログインをメールでもIDでも可能にする(Laravel5での開発で)

Laravel5で社内のシステムを開発するときに、ログインをメールアドレスでもIDでも出来るようにしたかった。そのとき使ったのが、filter_var関数。フィルタにFILTER_VALIDATE_EMAILを使えば簡単なスクリプトで、メールアドレスでもIDでもログインできるようになる。(ほとんど無いと思うけど特殊なメールアドレスには対応できません)

filter_var関数は、PHP5で使える関数で、指定したフィルタでデータをフィルタリング出来る。フィルタは、例えば、FILTER_VALIDATE_EMAILを使えば、メールの正しい型か否かを判断できる。その他、FILTER_VALIDATE_URL、FILTER_VALIDATE_INT、FILTER_VALIDATE_BOOLEAN、FILTER_VALIDATE_IP等がある。

下記がLaravel5で開発したときの実際のスクリプトです。

public function loginhandle(Request $request)
{
 // formのinputがメールかIDかを判定する。ここでfilter_varが役立つ。
 $field = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL) ? 'email' : 'username';

 $remember = \Input::has('remember');
 if (\Auth::attempt([$field=> $request->input('login'), 'password' => $request->input('password')], $remember))
 {
  $admin = \Auth::user();
  return redirect('admintop');
 }

 return redirect('login')->withErrors(['error'=>'IDかメールアドレスかパスワードが違います']);
}

Laravel5用に書いたhtml部分(少し余分なものも入っているけど)
  {!! Form::open() !!}

    <input type="hidden" name="_token" value="{{ csrf_token() }}">

    {!! Form::label('login', 'メールかID') !!}
    {!! Form::text('login') !!}

    {!! Form::label('password', 'パスワード') !!}
    {!! Form::password('password') !!}

    {!! Form::submit('ログイン') !!}

    {!! Form::label('remember', 'パスワード保存') !!}
    {!! Form::checkbox('remember', '1', true) !!}

  {!! Form::close() !!}

参照:
PHPのドキュメント
楽に検証!値をチェックしてくれるfilter関数
filter_var関数でメールアドレスをバリデーションする



0 件のコメント:

コメントを投稿