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 件のコメント:
コメントを投稿