前提
Laravelの学習の一環でログイン画面を自作しています。
ですのでmake:authは使っていません。
ログイン画面はメールアドレスとパスワードがDBデータと一致する事でログイン出来ます。
実現したいこと
登録されているメールアドレスだがパスワードが一致しない場合、
入力されたメールアドレスを保持したままエラーメッセージと共にログイン画面に戻したい。
発生している問題
①:パスワードはハッシュ化されているのでバリデーションの'exists'で比較するやり方がわかりません。
もしハッシュ化されたまま比較する事が可能なら書き方を教えて頂きたいです。
②:①が実現出来ないのでメールが一致したデータを先に取得し、そのパスワードに対して
Hash::checkを行ったあとif文でログイン画面に戻そうとしたが
value="{{ old('email') }}"に入力されたメールアドレスをセットするやり方がわかりません。
oldヘルパーのemailに$request->emailをセットするやり方を教えて頂きたいです。
該当のソースコード
Controller
1 public function login(LoginRequest $request) 2 { 3 try { 4 $user = User::where('email', $request->email)->firstOrFail(); 5 } catch (ModelNotFoundException $e) { 6 return view('auth.login')->with([ 7 'message' => 'メールまたはパスワードが正しくありません。', 8 // ここに追加したいがoldヘルパーにメールを設定する書き方がわからない 9 ]); 10 } 11 12 13 if(Hash::check($request->password, $user->password)) { 14 //ログイン成功処理 15 } else { 16 return view('auth.login')->with([ 17 'message' => 'メールまたはパスワードが正しくありません。', 18 // ここに追加したいがoldヘルパーにメールを設定する書き方がわからない 19 ]); 20 }
View
1@extends('layouts.default') 2 3 4@section('content') 5<div class="container mt-5"> 6 <div class="row justify-content-center"> 7 <div class="col-md-8"> 8 <div class="card"> 9 <div class="card-header">{{'ログイン'}}</div> 10 <div class="card-body"> 11 @isset ($message) 12 <div> 13 <p><strong>{{ $message }}</strong></p> 14 </div> 15 @endisset 16 <form method="POST" action="{{ url('login') }}"> 17 @csrf 18 <div class="form-group row"> 19 <label for="email" class="col-md-4 col-form-label text-md-right">{{'メール'}}</label> 20 <div class="col-md-6"> 21 <input id="email" type="text" class="form-control{{ $errors->has('email') ? ' is-invalid' : '' }}" name="email" value="{{ old('email') }}" autofocus> 22 23 @if ($errors->has('email')) 24 <span class="invalid-feedback" role="alert"> 25 <strong>{{ $errors->first('email') }}</strong> 26 </span> 27 @endif 28 </div> 29 </div> 30 <div class="form-group row"> 31 <label for="password" class="col-md-4 col-form-label text-md-right">{{'パスワード'}}</label> 32 <div class="col-md-6"> 33 <input id="password" type="password" class="form-control{{ $errors->has('password') ? ' is-invalid' : '' }}" name="password" value="{{ old('password') }}" required maxlength="191"> 34 35 @if ($errors->has('password')) 36 <span class="invalid-feedback" role="alert"> 37 <strong>{{ $errors->first('password') }}</strong> 38 </span> 39 @endif 40 </div> 41 </div> 42 43
Request
1 public function rules() 2 { 3 return [ 4 'email' => 'required|string|email|max:100', 5 'password' => 'required|string' //existsも追加したいがハッシュ化されているので一致しない 6 ]; 7 }

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/14 13:20 編集
2019/02/15 00:32
2019/02/15 11:17 編集
2019/02/20 07:58
2019/02/23 05:55
2019/02/25 00:44