[英]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.