簡體   English   中英

無法從 RouteServiceProvider 或 routes.php 文件訪問 Auth

[英]Couldn't access Auth from RouteServiceProvider or routes.php file

這就是我試圖在我的 routes.php 文件上完成的

if(Auth::user()->isCompany()){
    $middleware = "auth.company";
    $namespace = 'Company';
} else {
    $middleware = "auth.admin";
    $namespace = null;  
}

Route::group(['prefix' => 'admin'], 'middleware' => $middleware , 'namespace' => $namespace , function(){
     Route::get('/','AdminController@getIndex');
     Route::get('users', 'UsersController@getIndex');
});

我想為每個用戶角色使用相同的路由組,但會根據用戶角色由不同命名空間下的不同控制器處理。

我不想把它放在同一個控制器上,因為它會用很多條件弄亂控制器。

這里的問題是我無法訪問 Auth,我應該怎么做?

Auth::user()null因此導致此錯誤Trying to get property of non-object

我目前已登錄。 如果我刪除這段代碼,我仍然登錄。這是在使用身份驗證中間件的路由組內

更新:我已經嘗試了@samrap 的答案。 這是我的routes.php文件的樣子。 我仍然得到一個Trying to get property of non-object錯誤

<?php

Route::group(['middleware' => 'auth'], function()
{
    dd(\Auth::user()->id);
    // Insert the code above here ...
});

事實證明,我之前的回答似乎是錯誤的。 在我提供的鏈接中,該解決方案適用於用戶,但不適用於您。 它也對我不起作用。 從調試中我得出的結論是,在注冊路由時用戶尚未通過身份驗證。 考慮到整個應用程序依賴於路由,這是有道理的。 你可以通過在你的routes.php文件中添加一個檢查來驗證這個結論:

dd(\Auth::check());

無論用戶是否登錄,上面的行都將返回false 此時在應用程序運行時,用戶尚未從會話中注冊。 所以,你不能在路由文件中執行你想要的操作,這在我看來是一件好事。

那么,你能做些什么呢?

您可以創建自己的中間件來執行條件並根據這些條件調用適當的控制器。 查看這些資源以幫助您解決此問題:

http://laravel.com/docs/5.0/middleware http://laravel.io/forum/02-17-2015-laravel-5-routes-restricting-based-on-user-type

if ($user = \Auth::user() and $user->isCompany())

暫無
暫無

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

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