如果在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。

注::另一个可能是Gates

你应该使用Laravel中间件来实现这一点,我认为中间件是为你需要的工作而做的:

首先运行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的route middleware()方法来实现它,像这样:

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

希望这对你有帮助!

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