如果在 Laravel 5.3 中使用路由找不到会话,我们如何将一个页面重定向到另一个页面

How can we redirect a page to another if a session is not found using route in Laravel 5.3

我正在单独使用默认身份验证会话以外的会话。如果用户试图访问我的安全页面,他应该设置会话。如果没有该会话的任何人尝试访问方法,他们将被重定向到错误页面。我正在使用 Laravel 5.3

只有设置了名为'secured_user'的会话变量,用户才能看到下面两个页面。否则他们将被重定向到错误页面

Route::get('/secured-page1', 'ValidationController@CheckSecuredLogin_1');

Route::get('/secured-page2', 'ValidationController@CheckSecuredLogin_2');

最好的选择是政策。

您可以创建某些约束并将其与您的模型相结合。策略特别适合以后更改您的逻辑。

看这里:Create Policy

在您的 PagesPolicy 中,您可以添加此功能:

public function before(User $user, $ability)
{
    if ($user->isSuperAdmin()) {
        return true;
    }
}

public function seeSecurePage(User $user)
{
    // Your custom Code and session handling
    if(session("secured_user")) return true;
    return false;
}

并在您的控制器中。

$user->can("seeSecurePage","Pages");

如果"can"失败,会自动重定向到错误403。

P.S.: 另一种可能性是盖茨

除了上面的 awnser 之外,您还可以使用在路由上使用的中间件,甚至可以根据需要对它们进行分组。这是一个简单、快速和干净的解决方案。在中间件内部,您可以简单地检查您需要的会话是否存在,并根据结果采取任何必要的操作。 Laravel middleware docs

你应该使用 Laravel Middlewares 来实现这个,我认为中间件是为你需​​要的工作而制作的:

首先通过运行 artisan 命令创建一个新的中间件:

php artisan make:middleware CheckSesison

那么 CheckSession 将如下所示:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckSession
{
    public function handle($request, Closure $next)
    {
        if ($session_value != 'YOUR_DESIRED_VALUE') {
            return redirect('home');
        }

        return $next($request);
    }

}

现在,在您的 routes 文件中,您可以使用 laravel 的路由 middleware() 方法来实现它,如下所示:

Route::get('/secured-page1', 'ValidationController@CheckSecuredLogin_1')
    ->middleware(CheckSession::class);

希望对您有所帮助!