omarpre / impersonate
轻松在Laravel应用中模拟用户。(原包已废弃,此为副本)
Requires
- php: ^7.3|^8.1
Requires (Dev)
- orchestra/testbench: ~4.5.0
This package is not auto-updated.
Last update: 2024-09-19 19:45:40 UTC
README
一个轻量级但实用的用户模拟包。
模拟可以是一个跟踪测试之外的问题/错误的好方法。使用此包,您可以在不触及应用程序核心的情况下轻松实现它。
根据需要配置包,即可使用!
入门
您可以使用以下命令使用composer安装此包: composer require omarpre/impersonate
。
Laravel 5.5或更高版本
如果您使用的是5.5版本,则无需执行其他操作。由于该包支持自动发现,Laravel将自动注册服务提供者。
Laravel 5.4及以下版本
您必须手动注册服务提供者。转到 config/app.php
文件,并将 Pine\Impersonate\ImpersonateServiceProvider::class
添加到提供者数组中。
禁用包的自动发现
在某些情况下,您可能需要禁用此包的自动发现。您可以将提供者类添加到 dont-discover
数组中,以禁用它。
然后您需要手动再次注册它。
配置
您可能需要覆盖默认配置。为此,首先您必须使用以下命令发布配置文件: php artisan vendor:publish --provider=Pine\Impersonate\ImpersonateServiceProvider
。然后您可以在 config/impersonate.php
中找到配置文件。
中间件
默认情况下,模拟路由有两个中间件,即 web
和 auth
。但当然,这绝对不够。在配置文件的中间件部分,您可以添加更多中间件,或者添加在您的 Kernel.php
中注册的中间件,或者添加完全限定类名。
路由
该包带来了两个路由。一个用于模拟用户,另一个用于恢复到原始用户。
模拟路由的属性如下
- 路径:
/impersonate/{user}
- 名称:
impersonate.impersonate
- 控制器@操作:
Pine\Impersonate\Http\Controllers\ImpersonateController@impersonate
恢复路由的属性如下
- 路径:
/impersonate/revert
- 名称:
impersonate.revert
- 控制器@操作:
Pine\Impersonate\Http\Controllers\ImpersonateController@revert
如您所见,当我们导航用户到这些路由时,操作必须击中服务器。这意味着,如果您使用类似Vue Router的东西,请务必使用正常链接而不是路由器的链接。
<!-- Bad, it will hit the router --> <router-link to="/impersonate/revert">Revert</router-link> <!-- Good, it will hit the server --> <a href="/impersonate/revert">Revert</a>
重定向
模拟用户后或恢复,我们返回带有重定向响应。默认情况下,这两个操作都重定向到 /home
路径。您可以在配置文件的重定向部分单独配置这两个路由。
事件
当击中它们时,这两个操作都会触发事件。您可以在 EventServiceProvider
中设置自己的事件监听器。例如
protected $listen = [ \Pine\Impersonate\Events\ChangedToUser::class => [ // Listeners ], \Pine\Impersonate\Events\Reverted::class => [ // Listeners ], ];
此外,您还可以通过 ChangedToUser
事件访问模拟的用户。以下是一个示例监听器
public function handle(ChangedToUser $event) { // $event->user }
Blade指令
该包提供了一个blade指令,可以轻松检查用户是否处于模拟模式。它就像一个基本的if语句。
@impersonate
// You are impersonating
@else
// You are in your own profile
@endimpersonate
与JS一起工作
由于整个过程都是基于会话的,所以我们只能在服务器端获取当前状态的信息。这意味着,如果我们想将包与SPA集成,我们需要提取信息并将其使前端可访问。
在首次加载时,我们有将当前状态获取到 窗口
对象的机会。例如
<script> @impersonate window.isImpersonating = true; @else window.isImpersonating = false; @endimpersonate </script>
贡献
如果你发现了一个错误,或者你有关于这个包的想法,请随意提交一个问题。