Проверка паспортов Laravel, если пользователь активен перед входом - PullRequest
0 голосов
/ 13 октября 2018

Я использую Жадь для отправки почтового запроса на паспорт oauth/token и вот код:

public function login (Request $request) {
    $http = new \GuzzleHttp\Client;

    try {
        $response = $http->post(config('services.passport.login_endpoint'), [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => config('services.passport.client_id'),
                'client_secret' => config('services.passport.client_secret'),
                'username' => $request -> email,
                'password' => $request -> password,
            ],
        ]);
        return $response->getBody();
    } catch (\GuzzleHttp\Exception\BadResponseException $e) {
        if ($e->getCode() === 400)
            return response()->json('Invalid Request. Please enter a username or a password.', $e->getCode());
        else if ($e->getCode() === 401)
            return response()->json('Your credentials are incorrect. Please try again', $e->getCode());
        else if ($e->getCode() === 408)
            return response()->json('User is deactivated. Please try again', $e->getCode());

        return response()->json('Something went wrong on the server.', $e->getCode());
    }
}

Что я пытаюсь сделать:

У меня есть активное поле для каждого пользователя 1 is active and 0 is deactivated.

Я хочу проверить перед входом пользователя, активен он или нет, и отправить ответ с кодом 408 и сообщением, как я сделал в ifутверждение.

Что я пытался сделать:

Я пытался добавить это к User.php модели:

public function findForPassport($identifier) {
    return User::orWhere('email', $identifier)->where('active', 1)->first();
 }

Это работаетнормально.

Проблема:

1) Это возвращает ответ с 401, если не активен, и я хочу вернуть 408.

2) Iне знаю, является ли это лучшим способом сделать это или нет.

Ответы [ 3 ]

0 голосов
/ 13 октября 2018

Я нашел хорошее решение, изменив код логина на следующий код:

$http = new \GuzzleHttp\Client;

    // CHECK IF EMAIL IS ACTIVE
    $active = User::where('email', $request -> email) -> where('active', 0) -> exists();
    if($active)
        return response()->json('This user is not active', 403);

    try {
        $response = $http->post(config('services.passport.login_endpoint'), [
            'form_params' => [
                'grant_type' => 'password',
                'client_id' => config('services.passport.client_id'),
                'client_secret' => config('services.passport.client_secret'),
                'username' => $request -> email,
                'password' => $request -> password,
            ],
        ]);
        return $response->getBody();
    } catch (\GuzzleHttp\Exception\BadResponseException $e) {
        if ($e->getCode() === 400)
            return response()->json('Invalid Request. Please enter a username or a password.', $e->getCode());
        else if ($e->getCode() === 401)
            return response()->json('Your credentials are incorrect. Please try again', $e->getCode());
        return response()->json('Something went wrong on the server.', $e->getCode());
    }

Таким образом, я мог бы просто проверить, активен ли user или не используетemail.

0 голосов
/ 14 октября 2018

Эта проблема может помочь вам проверьте здесь

0 голосов
/ 13 октября 2018

Почему вы входите в систему с помощью жреты, а не только обычным способом?если вы просто тестируете, используйте вместо этого почтальон.Возможно, посмотрите на это: https://laravel.com/docs/5.7/passport#consuming-your-api-with-javascript

Но чтобы ответить на ваш вопрос, вы можете изменить этот пользовательский метод issueToken и добавить активную проверку.Кроме того, использует этот идентификатор клиента паспорта / секретное промежуточное ПО "прокси", так как идентификатор / секрет не должен быть видимым для публики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...