programing

Passport를 사용하여 API 호출에서 laravel_token을 새로 고치는 방법

goodcopy 2022. 8. 23. 23:50
반응형

Passport를 사용하여 API 호출에서 laravel_token을 새로 고치는 방법

저는 Laravel 5.6, Vue 2.5, Laravel Passport로 SPA를 만들었는데 잘 작동하고 있습니다.Laravel과 Vue는 API를 사용하여 SPA를 쉽고 재미있게 만들 수 있기 때문에 매우 좋아합니다.

문서에 설명된 대로 Laravel Passport를 설정한 후 로그인 및 API 호출은 올바르게 반환되어 쿠키에 저장되는 'laravel_token'을 기반으로 정상적으로 작동합니다.

단, 사용자가 페이지를 새로고침하지 않고 API에 대한 호출만 액시스를 사용하여 장시간 앱을 사용하고 있다는 것이 문제입니다.Laravel은 API 호출의 laravel_token(및 대응하는 쿠키)을 리프레시하지 않습니다(Web 루트를 호출하면 리프레시 됩니다).그 결과, 「laravel_token」은 어느 시점에서 기한이 만료되어, 유저는 재로그인 할 필요가 있습니다.

Axios에서 API 루트를 호출할 때마다 Laravel_token을 강제로 새로 고치려면 어떻게 해야 합니까?

어떤 도움이라도 정말 감사합니다!

과거에도 같은 문제를 해결하기 위해 간단한 루트를 만들었습니다.webmiddleware group)을 사용하여 브라우저 탭이 열려 있는 동안 세션을 활성 상태로 유지합니다.

routes/web.php:

Route::get('/keep-alive', function () {
    return response()->json(['ok' => true]);
})->middleware('auth');

그런 다음 javascript를 사용하여 이 루트를 정기적으로 ping합니다.

setInterval(() => {
    axios.get('/keep-alive')
        .then(() => {})
        .catch(() => {})
}, 600000)

자세한 것은, https://stackoverflow.com/a/57290268/6038111 를 참조해 주세요.

Axios 에는, 콜의 실패 여부를 「인터셉트」/확인하는 방법이 있습니다.에러 콜백의 내부에는, 인증되지 않은 에러인지 아닌지가 표시되어 페이지를 새로고침 하는 것만으로 표시됩니다.

인정하건대, 나는 다른 세션 토큰 "laravel_token"을 얻기 위해 에러가 발생한 블록에 다른 Axios 호출을 쓸 수 있기를 원하지만, 아직 방법을 찾지 못했다.페이지를 새로고침하면 larabel_token이 새로고침되므로 일단은 문제가 해결됩니다.¯\_(ツ)_/¯

심사숙고:실제로 Axios 호출을 통해 laravel_token을 갱신할 수 없었던 것은 이미 세션을 파기했기 때문이라고 생각합니다.이런 식으로 해야 할 것 같아요.

// Refresh Laravel Session for Axios
window.axios.interceptors.response.use(
    function(response) {
        // Call was successful, don't do anything special.
        return response;
    },
    function(error) {
        if (error.response.status === 401) {

            // Reload the page to refresh the laravel_token cookie.
            location.reload();
        }

        // If the error is not related to being Unauthorized, reject the promise.
        return Promise.reject(error);
    }
);

언급URL : https://stackoverflow.com/questions/49341888/how-to-refresh-the-laravel-token-on-api-calls-with-passport

반응형