Laravel 5.7 Auth с электронной почтой / именем пользователя и паролем, используя tymon / jwt - PullRequest
0 голосов
/ 09 ноября 2018

Я использую 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'));
}

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

1 Ответ

0 голосов
/ 18 ноября 2018

В вашем 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...