omarpre/impersonate

轻松在Laravel应用中模拟用户。(原包已废弃,此为副本)

安装: 190

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:项目

v3.0.0 2023-10-19 15:38 UTC

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 中找到配置文件。

中间件

默认情况下,模拟路由有两个中间件,即 webauth。但当然,这绝对不够。在配置文件的中间件部分,您可以添加更多中间件,或者添加在您的 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>

贡献

如果你发现了一个错误,或者你有关于这个包的想法,请随意提交一个问题。