2 回答

TA貢獻1895條經驗 獲得超3個贊
我需要更多的調試信息,但我的第一個假設是缺少或中間件。AuthenticateSessionAuthenticate
Laravel 為內部的路由定義了一個默認的中間件組,該組使用中間件。這是新安裝的樣子:webroutes/web.phpAuthenticateSession
Route::group([
'middleware' => 'web', <<< this is the magic part
'namespace' => $this->namespace,
], function ($router) {
require base_path('routes/web.php');
});
在這里,我們看到使用了中間件組。web
在您的自定義模塊/服務提供商中,情況并非如此。您的定義將添加到 此組中,但不在此組中。因此,不會執行對用戶進行身份驗證所需的所有內部設置。Route::get()Router
在這種情況下,我會嘗試使用或將使用主項目組中間件。->middleware('auth')->middleware('web')
Route::get('dashboard/visitors', '\Rainieren\Visitors\Http\Controllers\VisitorController@index')
->name('visitors')
->middleware('web');
這是一個不同的想法:
如果您說您始終經過身份驗證。然后,您可以嘗試將所有中間件移動到 () 中的全局中間件中。webKernelprotected $middleware = []
我沒有測試過這個,但我可以想象這也可以工作。

TA貢獻1995條經驗 獲得超2個贊
我已經在我的所有活動包中看到它們在視圖中根本不使用Auth類。
他們的解決方法是在控制器中使用它并將其傳遞到視圖:
$user = auth()->user();
return view('folder.view' ,['user'=>$user]);
然后在視圖中:
{{$user->token}} <!-- OR --!> {{$user->unreadNotifications->count()}}
顯然,正如@N69S所說,只有當用戶經過身份驗證時,這才有效。
希望這有效!
編輯:(抱歉第一次理解不好)
錯誤在于你的服務提供者類 yo 必須在引導函數上執行所有邏輯,而不是在寄存器中執行,因為如果你在寄存器函數中執行所有操作,則在 laravel 框架(說些什么)之前加載所有邏輯 https://laravel.com/docs/5.7/providers#the-register-method
您的服務提供者應按如下方式結束:
public function register()
{
//Nothing
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
// Controllers
$this->app->make('Rainieren\Visitors\Http\Controllers\VisitorController');
// Views
$this->loadViewsFrom(__DIR__.'/resources/views', 'visitors');
$this->publishes([
__DIR__.'/resources/views' => resource_path('views/visitors'),
]);
// Migrations
$this->loadMigrationsFrom(__DIR__.'/database/migrations');
include __DIR__ . '/routes/routes.php';
}
希望這最終有效!
- 2 回答
- 0 關注
- 106 瀏覽
添加回答
舉報