首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel日志系统用户失败

Laravel日志系统用户失败
EN

Stack Overflow用户
提问于 2018-03-27 12:45:25
回答 1查看 61关注 0票数 0

我试图登录一个没有会话或cookie的系统用户。

除非用户id来自系统用户,否则我的middelware中的以下代码可以工作:

代码语言:javascript
复制
   $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正在添加一个全局范围,它执行以下操作:

代码语言:javascript
复制
public function apply(Builder $builder, Model $model)
{
    $builder->where('system_user', '=', 0);
}

这就是为什么它不能与用户系统一起工作的原因。但是现在的问题是,是否可以禁用它来验证用户的身份。

我尝试了以下几项,但没有成功:

代码语言:javascript
复制
  $user = User::withoutGlobalScope(SystemUser::class)->find(1);

  $success = Auth::login($user);

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

是否有办法避免对函数使用全局范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-27 13:49:39

解决方案是使用User::withoutGlobalScope获取用户,然后使用Auth::setUser函数来避免使用范围的查询。

代码语言:javascript
复制
$interface_token = $request->header('token');

if ($interface_token !== 'my_secret') {
    return response('Unauthorized', 401);
}

$user = User::withoutGlobalScope(SystemUser::class)->find(1);

Auth::setUser($user);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49513226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档