Laravel 5.7 Auth с электронной почтой / именем пользователя и паролем, используя tymon / jwt

Я использую jwt-auth для своего приложения Laravel 5.7. В настоящее время я разрешаю клиенту вводить электронную почту и пароль в качестве учетных данных пользователя.

Тем не менее, я также хочу позволить клиенту ввести свое имя пользователя вместо своей электронной почты. Таким образом, у них есть 2 варианта: электронная почта или имя пользователя.

Как я могу сделать это в моем коде?

Мой UserController @ authenticate

public function authenticate(Request $request)
{
$credentials = $request->only('email', 'password');
try {
if (!$token = JWTAuth::attempt($credentials)) {
return response()->json([
'status' => 401,
'message' => 'invalid_credentials',
], 401);
}
} catch(JWTException $e) {
return response()->json([
'status' => 500,
'message' => 'token_creation_failed',
], 500);
}

return response()->json(compact('token'));
}

заранее спасибо

0

Решение

В вашем AuthController добавьте это в метод входа в систему;

public function login()
{
$loginField = request()->input('login');
$credentials = null;

if ($loginField !== null) {
$loginType = filter_var($loginField, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';

request()->merge([ $loginType => $loginField ]);

$credentials = request([ $loginType, 'password' ]);
} else {
return $this->response->errorBadRequest('What do you think you\'re doing?');
}

if (! $token = auth()->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
}

return $this->respondWithToken($token);
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector