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 关注
- 80 浏览
添加回答
举报