有没有办法在服务提供商启动方法(无状态 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的解决办法
通过 ServiceProxy 访问无状态服务失败 + ASP.NET 5 Web API 项目引发健康状态错误