Обработка истечения сеанса, Laravel с Vue и Axios - PullRequest
0 голосов
/ 17 июня 2020

У меня есть админка и одна для обычных пользователей. Прямо сейчас, когда мой сеанс истекает, я получаю перенаправление из области администратора на домашнюю страницу, и мне нужно обновить sh страницу, чтобы перенаправить меня на /login. PS. Я использую Vue. js для внешнего интерфейса.

Я хочу, чтобы меня перенаправляли на мою страницу / login по истечении сеанса вместо домашней страницы, которая тогда не должна быть видна.

web. php

// Admin routes
Route::middleware(['can:admin'])->group(function () {
  // all routes for admin, and when my session expire I get redirected from here
}


Route::middleware('guest')->get('/', function () {
    return redirect('/login');
});

// Normal user routes
Route::middleware('auth')->get('/', function () {
    return view('layouts.app');
});

Route::middleware('auth')->get('/{any}', function () {
    return view('layouts.app');
})->where('any', '.*');

AuthServiceProvider

public function boot()
{
    $this->registerPolicies();

    Gate::define('admin', function ($user) {
        return !empty($user->roles()->where('admin_area', true)->first());
    });

    Gate::define('normal', function ($user) {
        return !empty($user);
    });
}

Одно из решений - отловить 403 ошибку с axios и выполнить жесткое обновление sh. Но я знаю, что это не совсем нормально.

1 Ответ

2 голосов
/ 17 июня 2020

В вашем случае предложенное вами решение мне подходит. Если вы все равно делаете AJAX запросы, почему бы не отреагировать на 403 неавторизованный ответ и не перенаправить пользователя на страницу входа в систему!

Один из способов добиться этого - использовать перехватчики , если вы используете ax ios.

Вот короткий фрагмент кода из их документов:

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response;
    }, function (error) {
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // Do something with response error
    if(error.response.status === 403) {
        // redirect to login page
        window.location.href = "/login";
    }
    return Promise.reject(error);
  });

Для всех остальных:

Я думаю, что это файл, который вы поиск может быть app/Http/Middleware/Authenticate.php

Здесь вы найдете следующие строки кода:

/**
 * Get the path the user should be redirected to when they are not authenticated.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return string|null
 */
protected function redirectTo($request)
{
    if (! $request->expectsJson()) {
        return route('login');
    }
}

как видите, не json запросы должны быть перенаправлены на маршрут с именем login. Поэтому убедитесь, что путь к вашей странице входа также имеет имя login или измените Authenticate. php соответственно.

...