thepinecode/impersonate

该软件包已被弃用且不再维护。未建议替代软件包。

在 Laravel 应用中轻松模拟用户。

v0.4.0 2020-01-15 10:24 UTC

This package is auto-updated.

Last update: 2020-09-09 16:58:23 UTC


README

一个轻量级但实用的用户模拟软件包。

模拟可以是一种追踪测试之外问题/错误的好方法。使用此软件包,可以轻松实现,而不必触及我们应用的核心。

根据您的需求配置软件包,即可开始使用!

入门

您可以使用 composer 命令 composer require thepinecode/impersonate 安装此软件包。

Laravel 5.5

如果您正在使用版本 5.5,则无需执行其他操作。由于软件包支持自动发现,Laravel 将在幕后自动注册服务提供者。

Laravel 5.4 及以下版本

您必须手动注册服务提供者。转到 config/app.php 文件,并将 Pine\Impersonate\ImpersonateServiceProvider::class 添加到 providers 数组中。

禁用软件包的自动发现

在某些情况下,您可能需要禁用此软件包的自动发现。您可以将提供者类添加到 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)集成,我们需要提取信息并使其在前端可用。

在首次加载时,我们有将当前状态提取到 window 对象的机会。例如:

<script>
    @impersonate
        window.isImpersonating = true;
    @else
        window.isImpersonating = false;
    @endimpersonate
</script>

贡献

如果你发现了一个错误或者你有关于此包的想法,请随时提交一个 issue。