2016-11-17 34 views
0

我正在使用默認驗證會話以外的會話。如果用戶嘗試訪問我的受保護頁面,他應該設置會話。如果沒有該會話的人試圖訪問手段,他們將被重定向到錯誤頁面。我正在使用Laravel 5.3如果在Laravel 5.3中找不到使用路由的會話,我們如何將頁面重定向到另一個頁面

只有在設置了名爲'secured_user'的會話變量時,用戶才能查看以下兩個頁面。否則他們將重定向到錯誤頁面

Route::get('/secured-page1', '[email protected]_1'); 

Route::get('/secured-page2', '[email protected]_2'); 
+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"); 

如果「能」失敗時,它會自動重定向到錯誤403

PS:另一種可能性是蓋茨

0

除了awnser以上,你也可以使用的二手中間件如果需要的話,甚至可以將它們分組。這是一個簡單,快速和乾淨的解決方案。在middelware內部,您可以簡單地檢查所需的會話是否存在,並根據結果採取必要的操作。 Laravel middleware docs

0

您應該使用Laravel Middlewares實現這一目標,我認爲中間件是您需要的工作提出:

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', '[email protected]_1') 
    ->middleware(CheckSession::class); 

希望這有助於!

相關問題