有没有办法在服务提供商启动方法(无状态 api 模式)中访问当前(登录)用户?

Posted

技术标签:

【中文标题】有没有办法在服务提供商启动方法(无状态 api 模式)中访问当前(登录)用户?【英文标题】:Is there a way to access current (loggedin) user within service providers boot method (in stateless api mode)? 【发布时间】:2020-11-07 10:01:37 【问题描述】:

我在服务提供商中定义 Gates。像这样:

        $permissions = \DB::table('permissions')->whereNotNull('route_name')->get();
        foreach ( $permissions as $permission) 
            Gate::define($permission->route_name, function($user) use ($permission)
                return $user->hasPermission($permission->route_name);
            );
        ;

我可以在 Gate 的回调中访问当前用户,但我无法在回调之外访问用户。相反,上面我想直接定义门:

        $permissions = \Auth::user()->permissions();
        foreach ( $permissions as $permission) 
            Gate::define($permission->route_name, function($user) 
                return true;
            );
        ;

这可能吗?

PS:我无法像在一些类似的问题中那样访问auth()->user(),因为我使用的是无会话的无状态身份验证。

【问题讨论】:

请看***.com/a/37373424/1978311 @KurtFriars 不,我已经尝试过了。但是如果您不使用会话,它们将不起作用。我使用没有会话的无状态身份验证,所以它不起作用。 是的,我明白了。到时候我会考虑更多。 【参考方案1】:

Gate::define 是一个回调方法。门是在引导阶段定义的。它们不会在引导阶段定义时运行,而只是准备好在运行时运行。在启动阶段,大部分服务(包括身份验证)尚未加载。

因此目前无法访问(登录的)用户。

【讨论】:

以上是关于有没有办法在服务提供商启动方法(无状态 api 模式)中访问当前(登录)用户?的主要内容,如果未能解决你的问题,请参考以下文章

将 Microsoft 无状态服务绑定到 Azure 存储 Blob?

ssh连接报错:Connection refused的解决办法

无状态 REST 服务器上的 Google API 回调

通过 ServiceProxy 访问无状态服务失败 + ASP.NET 5 Web API 项目引发健康状态错误

Django:当本地 .py 文件更改并动态加载时,有没有办法防止开发服务器重新启动?

向 API Gateway 提供多个路径参数(无服务器)