我单独使用一个会话,而不是默认的身份验证会话。如果用户试图访问我的安全页面,他应该设置会话。如果没有该会话的任何人试图访问手段,他们将被重定向到错误页面。我使用的是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中间件文档