Laravel日志记录系统用户失败

时间:2018-03-27 12:45:25

标签: php laravel authentication laravel-5

我试图在没有会话或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);

提取用户但无论如何登录失败。

有没有办法避免使用函数的全局范围?

1 个答案:

答案 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);