Я перезаписываю функцию входа в систему Laravel, чтобы она позволяла аутентифицироваться только при подтверждении пользователя, но у меня возникла проблема при использовании имени входа для электронной почты и имени пользователя, всякий раз, когда я получаю вход в систему, я получаю: «Поле электронной почты обязательно.» Спасибо.
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Input;
use Illuminate\Validation\ValidationException;
class LoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/';
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function showLoginForm()
{
$title= 'Login';
return view('auth.login', compact('title'));
}
public function login(Request $request)
{
$login=$request->email;
$login_type = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'name';
$this->validateLogin($request);
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
if($this->guard()->validate($this->credentials($request))) {
if(Auth::attempt([$login_type => $login, 'password' => $request->input('password'), 'confirmed' => 1])) {
session()->flash('status', 'Login exitoso!');
return redirect()->intended('/');
} else {
$this->incrementLoginAttempts($request);
$title= 'Login';
return view('auth.verify', compact('title'));
}
} else {
// dd('ok');
$this->incrementLoginAttempts($request);
throw ValidationException::withMessages([
$this->username() => [trans('auth.failed')],
]);
return redirect('/login')->withInput(Input::except('password'))->with('errors', 'Credenciales invalidas.');
}
}
}
Обновление: Я решил это с помощью следующего кода:
public function login(Request $request)
{
$this->validate($request, [
'login' => 'required',
'password' => 'required',
]);
$login_type = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL)
? 'email'
: 'name';
if (Auth::attempt([$login_type => $request->input('login'), 'password' => $request->input('password'),'confirmed' => 1])) {
return redirect()->intended($this->redirectPath());
}
else {
$this->incrementLoginAttempts($request);
$title= 'Login';
return view('auth.verify', compact('title'));
}
return redirect()->back()
->withInput()
->withErrors([
'login' => 'Las credenciales no estan en nuestros registros',
]);
}