簡體   English   中英

問:如何在 laravel 中的 controller 中制作條件構造函數語句

[英]Q: How to make conditional constructor statement within a controller in laravel

我有一個 controller ,它使用兩種可驗證類型的用戶模型,如果我被驗證為申請人,它會成功呈現applicant.index .index 視圖,如果我被驗證為雇主,也會發生同樣的事情。 對我來說,問題是當我沒有登錄並訪問/app時,它會呈現空白頁面。

如何保護此路由並重定向到例如'/'路由。

一個 controller 索引具有兩個不同視圖的兩個模型:

class ProfilesController extends Controller
{

    public function index()
    {

    if (auth('applicant')->check())
    {
        
        $applicants = Applicant::where('id', '!=', Auth::guard('applicant')->user()->id)->get();
        return view('applicant.index', compact('applicants'));

    } elseif (auth('employer')->check()) {
        
        $employers = Employer::where('id', '!=', Auth::guard('employer')->user()->id)->get();
        return view('employer.index', compact('employers'));

    }
    }
}

使用以下路線:

Route::get('/app/', 'Profiles\ApplicantController@index');

我已經嘗試過這段代碼,但它不起作用:

public function __construct()
    {
        if (auth('applicant')->check())
        {
            $this->middleware('auth:applicant');
        } elseif  (auth('employer')->check()) {
            $this->middleware('auth:employer');
        } else {
           return abort(404);
        }

    }

即使我通過了身份驗證, else 語句也會接管並返回404

Controller 的構造函數在請求通過中間件堆棧之前被命中(這就是 Laravel 實際上可以獲取您在構造函數中為控制器分配的中間件的方式)。 這意味着 session 尚未啟動,因此此時您將無法訪問 auth 或 session。

auth中間件本身采用可變數量的參數作為保護; 您可以將多個警衛傳遞給它以進行檢查:

'auth:applicant,employer'

這將遍歷所有這些守衛,如果其中一個返回用戶,它將將該守衛設置為默認值並讓請求通過。 如果它通過警衛旋轉並且它們都沒有進行身份驗證,則請求不會通過(身份驗證失敗)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM