如果在 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);
希望对您有所帮助!
我正在单独使用默认身份验证会话以外的会话。如果用户试图访问我的安全页面,他应该设置会话。如果没有该会话的任何人尝试访问方法,他们将被重定向到错误页面。我正在使用 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);
希望对您有所帮助!