我试图登录一个没有会话或cookie的系统用户。
除非用户id来自系统用户,否则我的middelware中的以下代码可以工作:
$interface_token = $request->header('token');
if ($interface_token !== 'my_secret') {
return response('Unauthorized', 401);
}
$user_id = 1; // Just for testing. Here I want to login a system user.
$success = Auth::onceUsingId($user_id);
if (!$success)
{
throw new Exception('failed!');
}我想登录一个系统用户,因为这个特定的路由将是从内部服务调用,而不是从“真正的”用户调用。
如果我更新用户id 1的表用户设置system_user = 0,它就能工作。
如果是system_user = 1,则不进行身份验证。
这个system_user列只是添加到用户表中的一个小片段,不应该影响,但很明显它会影响用户的表。
用户模型使用的是SystemUserTrait。
有什么想法吗?
我用的是Laravel 5.4
编辑
SystemUserTrait正在添加一个全局范围,它执行以下操作:
public function apply(Builder $builder, Model $model)
{
$builder->where('system_user', '=', 0);
}这就是为什么它不能与用户系统一起工作的原因。但是现在的问题是,是否可以禁用它来验证用户的身份。
我尝试了以下几项,但没有成功:
$user = User::withoutGlobalScope(SystemUser::class)->find(1);
$success = Auth::login($user);获取用户,但无论如何登录失败。
是否有办法避免对函数使用全局范围?
发布于 2018-03-27 13:49:39
解决方案是使用User::withoutGlobalScope获取用户,然后使用Auth::setUser函数来避免使用范围的查询。
$interface_token = $request->header('token');
if ($interface_token !== 'my_secret') {
return response('Unauthorized', 401);
}
$user = User::withoutGlobalScope(SystemUser::class)->find(1);
Auth::setUser($user);https://stackoverflow.com/questions/49513226
复制相似问题