spatie/laravel-login-link

快速登录到本地环境

1.3.1 2024-08-07 06:40 UTC

This package is auto-updated.

Last update: 2024-09-07 06:50:19 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

在开发包含管理区域(或任何非公开区域)的应用程序时,你可能需要为测试用户创建登录。在大型团队中,由于许多不同的应用程序,跟踪正确的凭证可能很繁琐。用户账户是 "yourname@company.com",还是 "test@company.com",甚至是 "admin@company.com"?密码是 "password",还是 "secret",或者是其他什么?如何登录具有不同角色的用户?

此包通过提供一个将渲染登录链接的组件来解决此问题。点击该链接将登录。

在您的登录视图中,您可以添加 x-login-link 组件以显示登录链接。使用 @env('local') 确保仅在本地区域渲染链接。

@env('local')
    <div class="space-y-2">
        <x-login-link email="admin@spatie.be" label="Login as admin"/>
        <x-login-link email="user@spatie.be" label="Login as regular user"/>
    </div>
@endenv

在浏览器中这可能会看起来像这样

screenshot

它适用于本地开发,可能不应该在任何公开可访问的环境中使用。

您是视觉学习者吗?

这里有一个由 Christoph Rumpel 制作,展示 Laravel Login Link 的 Laracasts 视频教程

支持我们

我们投入了大量资源来创建 一流的开放源代码包。您可以通过 购买我们的付费产品之一 来支持我们。

我们非常感谢您从家乡寄来明信片,说明您正在使用我们的哪些包。您可以在 我们的联系页面 上找到我们的地址。我们将所有收到的明信片发布在我们的 虚拟明信片墙上

安装

您可以通过 composer 安装此包。

composer require spatie/laravel-login-link

可选,您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="login-link-config"

这是发布配置文件的内容

use Spatie\LoginLink\Http\Controllers\LoginLinkController;

return [
    /*
     * Login links will only work in these environments. In all
     * other environments, an exception will be thrown.
     */
    'allowed_environments' => ['local'],

    /*
     * The package will automatically create a user model when trying
     * to log in a user that doesn't exist.
     */
    'automatically_create_missing_users' => true,

    /*
     * The user model that should be logged in. If this is set to `null`
     * we'll take a look at the model used for the `users`
     * provider in config/auth.php
     */
    'user_model' => null,

    /*
     * After a login link is clicked, we'll redirect the user to this route.
     * If it is set to `null`, we'll redirect the user to their last intended/requested url.
     * You can set it to `/`, for making redirect to the root page.
     */
    'redirect_route_name' => null,

    /*
     * The package will register a route that points to this controller. To have fine
     * grained control over what happens when a login link is clicked, you can
     * override this class.
     */
    'login_link_controller' => LoginLinkController::class,

    /*
     * This middleware will be applied on the route
     * that logs in a user via a link.
     */
    'middleware' => ['web'],
];

可选,您可以使用以下命令发布视图

php artisan vendor:publish --tag="login-link-views"

使用

要渲染登录链接,只需将 x-login-link Blade 组件添加到您的视图中。我们强烈建议仅在 local 环境中渲染。

@env('local')
    <x-login-link />
@endenv

该组件将渲染一个链接,点击后将登录。默认情况下,它将重定向到最后一个意图/请求的 URL,但您可以通过在 login-link 配置文件的 redirect_route_name 中指定路由名称来自定义该行为。您还可以在组件本身上指定重定向 URL。

<x-login-link redirect-url="{{ route('dashboard') }}"  />

指定登录的用户模型

默认情况下,它将使用在 auth 配置文件的 providers.users.model 键中指定的用户模型类。要覆盖此设置,您可以将 login-link 配置文件的 user_model 设置为您用户模型类的名称。

该包将登录表中的第一个用户。您可以通过传递一个 email 属性来自定义此行为。具有该电子邮件地址的用户将被登录。

<x-login-link email="admin@example.com"  />

或者,您可以指定用户的唯一键(在大多数情况下将是 id

<x-login-link key="123"  />

您还可以指定需要登录的用户属性。

<x-login-link :user-attributes="['role' => 'admin']"  />

自定义登录链接

默认情况下,该包将显示“开发者登录”作为登录链接的文本。您可以通过传递一个 label 属性来自定义。

<x-login-link label="Click here to log in">

登录链接默认具有 Tailwindunderline。要自定义,您可以传递任何想要的 CSS 类到类属性。这些类将覆盖默认的 underline

以下是使用 Tailwind CSS 创建红色、下划线链接的方法。

<x-login-link class="underline text-red-500">

指定登录守卫

默认情况下,该包将使用默认守卫。您可以指定另一个守卫。

<x-login-link guard="admin">

自动创建用户

如果需要登录的用户不存在,该包将使用您的用户模型工厂创建用户,并登录新用户。

如果您不希望这种行为,将 local-link 配置文件中的 automatically_create_missing_users 设置为 false

与 Vue 或 React 和 Inertia.js 一起使用

该包具有内置组件,支持 Vue 或 React 和 InertiaJS。属性与 blade 组件相同。

按照如下方式编辑 HandleInertiaRequests 中间件

public function share(Request $request): array
{
    return array_merge(parent::share($request), [
        'environment' => app()->environment(),
        // ...
    ]);
}

因此,如果您需要在本地环境中仅显示按钮,对于 Vue 使用组件如下

import LoginLink from '@/../../vendor/spatie/laravel-login-link/resources/js/login-link.vue';

<LoginLink v-if="$page.props.environment === 'local'" />

// or

<LoginLink v-if="$page.props.environment === 'local'" label="Login as user@example.com" class="pb-3 text-red-500" :redirect-url="route('dashboard')" />

对于 React,使用组件如下

import LoginLink from '@/../../vendor/spatie/laravel-login-link/resources/js/LoginLink';
// or for TypeScript, uncomment the following line
//import LoginLink from '@/../../vendor/spatie/laravel-login-link/resources/ts/LoginLink';

{page.props.environment === 'local' && (
    <LoginLink />
)}

// or

{page.props.environment === 'local' && (
    <LoginLink
        label="Login as user@example.com"
        className="pb-3 text-red-500"
        redirectUrl={route('dashboard')}
    />
)}

与 Js / ... 一起使用

该包仅支持 Vue 和 React。当您使用其他 JS 前端框架渲染视图时,您仍然可以使用该包。

您应该向 /laravel-login-link-login 发送 POST 请求。如果您不提供任何有效负载,则将登录您用户表中第一个用户。如果没有用户,则会创建一个。

可选地,您可以发布这些有效负载字段中的任何一个。这些有效负载字段的功能与您可以向 x-login-link 组件传递的属性相匹配。

  • email:尝试使用给定的电子邮件地址登录用户
  • key:尝试使用给定的键(在大多数情况下是用户的 id)登录用户
  • redirect_url:登录后应重定向到的 URL
  • user_attributes:包含将登录的用户需要拥有的属性的数组。

由于这是一个 POST 请求,请确保还传递 CSRF 令牌。

在其他环境中使用

默认情况下,登录链接仅在本地环境中工作。如果您想在其他环境中使用它,请将 login-link 配置文件中的 allowed_environments 键设置为这些环境的名称。

但是请注意,您不应该在任何公开可达的环境中显示登录链接,因为这将允许任何人登录。

该包在底层是如何工作的

Povilas Korop of Laravel Daily made a nice video on the internals of the package.

测试

composer test

更改日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略

鸣谢

许可证

MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。