Мне удалось выполнить то, что я хотел сделать, если кто-то столкнется с этой проблемой, вот что я сделал ...
Создан пользовательский AuthController и метод входа в систему для замены oauth / токена по умолчанию в Laravel Passport:
use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory;
use Illuminate\Http\Response;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Response;
use \Laravel\Passport\Http\Controllers\AccessTokenController as AccessTokenController;
class AuthController extends AccessTokenController
{
use AuthenticatesUsers;
//custom login method
public function login(Request $request)
{
//...
}
}
Перед любыми другими действиями по входу проверьте, достиг ли пользователь максимального количества попыток входа:
//custom login method
public function login(Request $request)
{
//check if the max number of login attempts has been reached
if ($this->hasTooManyLoginAttempts($request))
{
$this->fireLockoutEvent($request);
return "To many attempts...";
}
//...
}
Проверьте учетные данные пользователя, попытавшись войти в систему. Если авторизация прошла успешно, сбросьте счетчик неудачных попыток. Если это не удается, увеличьте счетчик:
//check if user has reached the max number of login attempts
//verify user credentials
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials))
{
//reset failed login attemps
$this->clearLoginAttempts($request);
//...
}
else
{
//count user failed login attempts
$this->incrementLoginAttempts($request);
return "Login failed...";
}
И, наконец, поскольку Passport (OAuth2) использует запросы PSR-7 (интерфейс запроса сервера), нам нужно преобразовать стандартный запрос Laravel в PSR-7, чтобы выдать токен доступа:
//Authentication passed...
//convert Laravel Request (Symfony Request) to PSR-7
$psr7Factory = new DiactorosFactory();
$psrRequest = $psr7Factory->createRequest($request);
//generate access token
$tokenResponse = parent::issueToken($psrRequest);
//return issued token
return Response::json($tokenResponse);
Вот полный метод входа в систему:
public function login(Request $request)
{
//check if user has reached the max number of login attempts
if ($this->hasTooManyLoginAttempts($request))
{
$this->fireLockoutEvent($request);
return "To many attempts...";
}
//verify user credentials
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials))
{
//Authentication passed...
//reset failed login attemps
$this->clearLoginAttempts($request);
//convert Laravel Request (Symfony Request) to PSR-7
$psr7Factory = new DiactorosFactory();
$psrRequest = $psr7Factory->createRequest($request);
//generate access token
$tokenResponse = parent::issueToken($psrRequest);
//return issued token
return Response::json($tokenResponse);
}
else
{
//count user failed login attempts
$this->incrementLoginAttempts($request);
return "Login failed...";
}
}
person
Ricky
schedule
16.04.2018