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

时间:2016-11-17 10:12:03

标签: php laravel laravel-5 laravel-routing

我正在使用除默认身份验证会话之外的其他会话。如果用户尝试访问我的安全页面,他应该设置会话。如果没有该会话的任何人试图访问手段,他们将被重定向到错误页面。我正在使用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>

3 个答案:

答案 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);

希望这有帮助!