我试图在没有会话或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为system_user = 0
的用户,则可以正常工作。
如果system_user = 1
则不进行身份验证。
这个system_user列只是添加到用户表中的一个tinyint,它不应该影响但显然会影响它。
用户模型正在使用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);
提取用户但无论如何登录失败。
有没有办法避免使用函数的全局范围?
答案 0 :(得分:0)
解决方案是使用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);