我需要对Illuminate / Broadcasting / Broadcasters / Broadcaster.php中的retrieveUser()函数进行更改。
如果我直接编辑该类,则更改有效,但是我听说您不应该这样做,因为很难跟踪对源代码的更改,并且由于在升级Laravel或推向生产环境时它将被覆盖
因此,如果我想为Broadcaster类编写自己的修改后的restoreUser()函数(它恰好是实现BroadcasterContract的抽象类),那么我将在哪里以及如何做到这一点?
原始功能:
/**
* Retrieve the authenticated user using the configured guard (if any).
*
* @param \Illuminate\Http\Request $request
* @param string $channel
* @return mixed
*/
protected function retrieveUser($request, $channel)
{
$options = $this->retrieveChannelOptions($channel);
$guards = $options['guards'] ?? null;
if (is_null($guards)) {
return $request->user();
}
foreach (Arr::wrap($guards) as $guard) {
if ($user = $request->user($guard)) {
return $user;
}
}
}
新功能:
protected function retrieveUser($request, $channel)
{
$options = $this->retrieveChannelOptions($channel);
$guards = $options['guards'] ?? null;
if (is_null($guards)) {
$token = $request->header('Token');
$id = Crypt::decrypt($token);
$user = User::find($id);
return $user;
}
foreach (Arr::wrap($guards) as $guard) {
if ($user = $request->user($guard)) {
return $user;
}
}
}
更新
正如@ggdx在评论中指出的那样,我可以通过执行class yourClass extends Illuminate\Broadcasting\Broadcasters\Broadcaster
来覆盖该类。
但是,我仍然不知道将该新类放在Laravel框架中的位置。我尝试在/ app路由中创建新类,但这没用。
答案 0 :(得分:1)
我不确定您要完成什么。但是我认为为后卫定制一个司机会做你想要的。查看文档https://laravel.com/docs/5.8/authentication#adding-custom-guards
您可以在AuthServiceProvider的启动方法中执行此操作。
Auth::viaRequest('custom-token', function ($request) {
return User::find(Crypt::decrypt($request->header('Token')));
});
另外,请确保在auth.php配置文件中将其选择为保护您的驱动程序。