Как сделать вход по логину, вместо email? laravel 7.0 passport oauth
Использую laravel 7 в связке с VueJS. Нужно сделать вход по логину. По email все работает корректно и возвращает код 200, а по логину возвращает 400. Это мой первый проект laravel + Vue, поэтому не хватает знаний и понимая как это работает. Данный код нашел на просторах интернета, пытаюсь понять как работает и переделать. Там где у меня request('login') было указано 'email' и все работало
public function login()
{
// Проверяем существует ли пользователь с указанным email адресом
$user = User::where('login', request('login'))->first();
if (!$user) {
return response()->json([
'message' => 'Wrong email or password',
'status' => 422
], 422);
}
// Если пользователь с таким email адресом найден - проверим совпадает
// ли его пароль с указанным
if (!Hash::check(request('password'), $user->password)) {
return response()->json([
'message' => 'Wrong email or password',
'status' => 422
], 422);
}
// Внутренний API запрос для получения токенов
$client = DB::table('oauth_clients')
->where('password_client', true)
->first();
// Убедимся, что Password Client существует в БД (т.е. Laravel Passport
// установлен правильно)
if (!$client) {
return response()->json([
'message' => 'Laravel Passport is not setup properly.',
'status' => 500
], 500);
}
$data = [
'grant_type' => 'password',
'client_id' => $client->id,
'client_secret' => $client->secret,
'username' => request('login'),
'password' => request('password'),
];
$request = Request::create('/oauth/token', 'POST', $data);
$response = app()->handle($request);
// Проверяем был ли внутренний запрос успешным
if ($response->getStatusCode() != 200) {
return response()->json([
'message' => 'Wrong email or password',
'status' => 422
], 422);
}
// Вытаскиваем данные из ответа
$data = json_decode($response->getContent());
// Формируем окончательный ответ в нужном формате
return response()->json([
'token' => $data->access_token,
'user' => $user,
'status' => 200
]);
}