我正在使用除默认身份验证会话之外的其他会话。如果用户尝试访问我的安全页面,他应该设置会话。如果没有该会话的任何人试图访问手段,他们将被重定向到错误页面。我正在使用Laravel 5.3
仅当名为' secured_user'的会话变量时,用户才能查看以下两个页面。已设定。否则,它们将重定向到错误页面
<java.version>1.8</java.version>
<javax.inject.version>1</javax.inject.version>
<liquibase-hibernate4.version>3.5</liquibase-hibernate4.version>
<liquibase-slf4j.version>2.0.0</liquibase-slf4j.version>
<liquibase.version>3.4.2</liquibase.version>
<logstash-logback-encoder.version>4.7</logstash-logback-encoder.version>
<mapstruct.version>1.0.0.Final</mapstruct.version>
<maven-enforcer-plugin.version>1.4.1</maven-enforcer-plugin.version>
<maven-resources-plugin.version>3.0.1</maven-resources-plugin.version>
<maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
答案 0 :(得分: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");
如果&#34;可以&#34;失败后,它会自动重定向到错误403。
P.S。:另一种可能性是盖茨
答案 1 :(得分:0)
除了上面的awnser之外,您还可以使用路由上使用的中间件,甚至可以根据需要对它们进行分组。这是一个简单,快速和清洁的解决方案。在middelware内部,您可以简单地检查您需要的会话是否存在,并根据结果采取必要的行动。 Laravel middleware docs
答案 2 :(得分:0)
您应该使用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);
希望这有帮助!