@Maria_Gavrilova

Контроллер АПИ-аутентификации в laravel?

Здравствуйте. Я пишу api-аутентификацию на основе laravel passport для мобильного приложения. У пользователей нет пароля. Они входят в систему по смс-коду. Сначала они вводят телефон -> им отправляется смс-код -> и затем идёт запрос для входа в систему (с смс-кодом в теле запроса) на вот такой метод контроллера:
public function login(Request $request, User $user)
    {
        if ($request->get('phone_code') === $user->phone_code) {
            Auth::login($user, true);
            $token = $user->createToken($user->phone);

            return response()->json(["user" => auth()->user(), 'token_type' => 'Bearer', 'token' => $token->accessToken], 200);
        } else {
            return response()->json(["message" => "Wrong code"], 403);
        }
    }


Здесь возвращается access-token, который будет отправляться в заголовках при каждом запросе на сервер. Этот токен у нас в системе действует ровно один день. Через день он станет недействительным и пользователю придётся снова запрашивать код по смс. Мне бы этого не хотелось. Я бы хотела при его первом входе в систему помимо access-токена генерировать и отдавать ему refresh-токен, который действует две недели. И на следующий день, когда просрочится access-токен пользователя не разлогинет, а приложение отправит запрос с использованием refresh-токена, чтобы получить новые токены и он останется в системе залогиненным и будет уже обращаться к серверу с новеньким access-токеном. Собственно вопрос- как сгенерировать и access-токен и refresh-токен, если у пользователя нет пароля. Подскажите пожалуйста как мне добиться желаемого?

И правильно ли я размышляю? По такому ведь сценарию мобильные приложения и spa-приложения позволяют пользователям оставаться в системе и не вводить каждый раз пароль по истечению access токена?
  • Вопрос задан
  • 418 просмотров
Пригласить эксперта
Ответы на вопрос 2
Alex_Wells
@Alex_Wells
PHP/Kotlin
А причем тут пароль? Использую пасспорт, пароля в приложении тоже нет (и даже юзернейма/email'а). Они не связаны.

Делайте как в доках, к паролю оно не привязано.
Ответ написан
Комментировать
glaphire
@glaphire
PHP developer
По документации - концепция в том, чтобы по эндпоинту авторизации отдавать и access_token и refresh_token, и когда обращение по текущему access_token перестает действовать - брать полученный ранее refresh_token, делать запрос на эндпоинт рефреша и получать новый access_token. По каким данным пользователь получил свои самые первые access_token и refresh_token - это чисто вопрос архитектуры авторизации этого конкретного приложения.
https://laravel.com/docs/5.8/passport#refreshing-tokens
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы