Токены паспорта LaravelExpireIn не работают

Я использую паспорт Larave 5.4 для создания SPA-приложения. Однако мне удалось заставить аутентификацию работать. но токены доступа всегда являются недолговечными токенами со сроком действия 600 секунд.

я не мог увеличить время истечения с помощью:

Passport::tokensExpireIn(Carbon::now()->addDays(15));

Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));

это не имеет никакого эффекта.

любая помощь? заранее спасибо.


person Mohammad Ahmad    schedule 08.07.2017    source источник
comment
У меня точно такая же проблема. Однако я не хочу редактировать vendor. Любое другое решение приветствуется.   -  person Onur Demir    schedule 28.11.2018


Ответы (5)


Токены личного доступа всегда долговечны. Их время жизни не изменяется при использовании методов tokensExpireIn или refreshTokensExpireIn - как описано в официальной документации Laravel (https://laravel.com/docs/5.7/passport#personal-access-tokens).

Вариант редактирования PassportServiceProvider.php в каталоге vendor - плохая идея. Каждый раз, когда вы делаете обновление (e.g composer update/install) или другим разработчиком в производстве, код возвращается к статус-кво, и он начинает давать сбой.

Лучше использовать токены предоставления пароля. Предоставление пароля OAuth2 позволяет другим сторонним клиентам, например мобильному приложению, получать токен доступа, используя адрес электронной почты / имя пользователя и пароль. Это позволяет вам безопасно выдавать токены доступа своим основным клиентам, не требуя от ваших пользователей прохождения всего потока перенаправления кода авторизации OAuth2. Убедитесь, что вы правильно установили passport (см. Руководство: https://laravel.com/docs/5.7/passport#installation), затем запустите эту команду

php artisan passport:client --password

Сделав это, вы можете запросить токен доступа, отправив POST запрос /oauth/token. Помните, что этот маршрут уже зарегистрирован методом Passport::routes, поэтому нет необходимости определять его вручную. Если запрос будет успешным, вы получите access_token и refresh_token в ответе JSON от сервера. См. Пример полезной нагрузки ниже:

{
    "grant_type" : "password",
    "client_id":"your-client-id",
    "client_secret":"your-client-secret",
    "username":"[email protected]",
    "password":"123456",
    "scope":""
}

Образец ответа:

{
"token_type":"Bearer",
"expires_in":1296000,
"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6IjVkMWJjN2NhOTU0ZWU2YTZmOGNkMGEyOTFjOTI5YzU4Zjk3ODk3M2YxZDJmNjQ2NjkyZjhjODQyZjYxNTBjZGRiYzMwY2RjMzRmZjJhYmU1In0.eyJhdWQiOiI4IiwianRpIjoiNWQxYmM3Y2E5NTRlZTZhNmY4Y2QwYTI5MWM5MjljNThmOTc4OTczZjFkMmY2NDY2OTJmOGM4NDJmNjE1MGNkZGJjMzBjZGMzNGZmMmFiZTUiLCJpYXQiOjE1NDkyOTI5MjcsIm5iZiI6MTU0OTI5MjkyNywiZXhwIjoxNTUwNTg4OTI3LCJzdWIiOiIxIiwic2NvcGVzIjpbXX0.cSvu30xAT-boA5zmVuxTr0TfH_5MYuVWYi6NVQRbryZSswt8EAFTi5QXHH1f0O63DWnLA6VFBS2AfDe4-ryJZACDnt4gtPJOeuu1rNMZ53MU1vjxnyC8FsYz8v9vmYJsZPKqfTJpuJFYRFh7kkV7uWAmrEkuF3POnDn-GjW50f4i26lIZW5ta5j4nZQrIJCQUEzwXaQtn9H-qef3bTWAaplWaV-k7Blic-0TXXVfWa_CdoKCAzHROVBRWY1Idhe1LJkvGKldUGzUfliiB1x7EVVInq94VYEP5d9__90Z2UMUn5dCEgWkXvcEHYy87_4OSwu4TQk_f3hD82OVOEtJGgPyJqK51WqnQCBYwNtxNjqAW2oaMgpritp3G8nccUiyhkE4Pd_kj3cb2OvSNRXdDS9z-RnJb1OXUkja-4Xe_JfIWUjlTnkss18xMg89hcU_3xtBwUXBWHgffzcbNoI1oOwUL6Whekduiy8csf665v0cnzkPXISmvyGhiMseIlBEN9m9uESaJqD_g7WzbsEs7meI0CAF3230UgrI1MdYSAJMW0mMPF9EScH31a_Qpde5O233Ty6-S4NAp323Wneqs_jpGSfw81CvoI1JeY0hZccRC-MBBsQ2Ox7AM36H5L3p-ybricmT3oCcHEqhufq-ygyfqk1RufJwwRblwYPyaJE",
"refresh_token":"def50200c6b2378110190ac28d9d55f622885bb0b470a20543a6f1eefb18ed93c57b7040dc4db9444aa8853209bde9d5443a407d43fcaf1deb2e1f3f5ea3ce7431c4ec5e111bdc0cc71ca76034cd2a884441c51e4c922dddfa3f6e3a3fa8e1fbb8efe4581ce70d76590e732b3fa8b0c41a8abff4a8759f9dd1cc3ae46134fb67a8f25cd79e3229f6ee3238701ebfe0e8b0e2f14bd13c7fde3f813708a3de9928c8e992850994ca97bf61984cdb846bd0d72916312d9985472fc4293a3b3f2c55e1ef19621ef009623a6780f800ece9c8d835871dc795fda5daa43ac3fdae467e66b46e4eb73d53b8cb821522ee60979711c28c54fb2085f6000ac7e96e019ce51b9f92ea3fa2028aa0238fc3dca9c900e8dd77907782b22482f95a5e55708e5bda8c28f3732ff55e361f08447b33fe05d5646cecfb9faed462d327efdcc2a3742f46f9f825275d296b4ced25c05f3b6add68f43a2b448e4523d5410c631dc45bba"
}
person Dunsin Olubobokun    schedule 04.02.2019
comment
Начиная с laravel 5.8, время истечения срока действия токена личного доступа также можно установить с помощью personalAccessTokensExpireIn см. laravel 5.8 время жизни токена, если мы можем установить время истечения срока действия, то почему бы его не использовать? - person Haritsinh Gohil; 20.12.2019

Попробуйте использовать эту библиотеку: https://github.com/GeneaLabs/laravel-caffeine, и вы можете посмотреть параметры конфигурации сеанса laravel

person Nutscracker    schedule 08.07.2017
comment
это не связано с токеном доступа. я думаю, это о csrf_token в форме. в любом случае, спасибо. - person Mohammad Ahmad; 09.07.2017

tokenExpireIn () вместо refreshTokensExpireIn () используйте затем решите проблему tokenExpireIn.

person user7688086    schedule 17.01.2021

для жетона выдачи паспорта

    Passport::tokensExpireIn(Carbon::now()->addDays(10));
    Passport::refreshTokensExpireIn(Carbon::now()->addDays(15)); 

Это всего лишь добавление 10 минут срока годности. Не знаю, как и почему, но вместо этого меняю внутренние коды. Я изменил

    Passport::tokensExpireIn(Carbon::now()->addDays(10000));
    Passport::refreshTokensExpireIn(Carbon::now()->addDays(12000));

Теперь добавляется срок годности 7 дней. Похоже, функция addDays добавляет 10000 минут.

person Niks    schedule 03.08.2017

У меня раньше была такая же проблема с моим приложением, я потратил два дня, пытаясь найти, в чем проблема. Лучшее решение, которое я придумал, - изменить дату истечения срока действия непосредственно в PassportServiceProvider.

Перейдите к vendor / laravel / паспорт / src / PassportServiceProvider.php, строка 108

new PersonalAccessGrant, new DateInterval('P1Y')

например, чтобы установить срок годности на одну неделю

new PersonalAccessGrant, new DateInterval('P1W')

Я знаю, что это плохое решение для устранения проблемы, недавно я обнаружил ту же проблему в репозитории Laravel Git.

https://github.com/laravel/passport/issues/47

person Ali Mohammed    schedule 08.07.2017
comment
Работает. Спасибо. это не идеальное решение, но работает нормально. - person Mohammad Ahmad; 09.07.2017
comment
Это сработало. Благодарю. Кстати, редактирование файла в папке \ vendor не рекомендуется. Он не сможет работать в среде продукта или разработчика. - person Cong LB; 14.08.2018
comment
Это абсолютно недопустимое решение, так как изменения будут отменяться каждый раз при развертывании и обновлении пакета. Это вводит непредсказуемую причину ошибки. Пожалуйста, не позволяйте этому ответу быть принятым, поскольку это может побудить большее количество людей внедрить его в свою кодовую базу. - person Mattias; 07.12.2018