spatie / laravel-login-link
快速登录到本地环境
Requires
- php: ^8.0
- illuminate/contracts: ^10.0|^11.0
- spatie/laravel-package-tools: ^1.9.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- nunomaduro/collision: ^7.0|^8.0
- orchestra/testbench: ^8.0|^9.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-laravel: ^1.1|^2.3
- spatie/laravel-ray: ^1.26
- spatie/pest-plugin-snapshots: ^1.1|^2.1
- spatie/phpunit-snapshot-assertions: ^4.2.12|^5.1
README
在开发包含管理区域(或任何非公开区域)的应用程序时,你可能需要为测试用户创建登录。在大型团队中,由于许多不同的应用程序,跟踪正确的凭证可能很繁琐。用户账户是 "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
在浏览器中这可能会看起来像这样
它适用于本地开发,可能不应该在任何公开可访问的环境中使用。
您是视觉学习者吗?
这里有一个由 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">
登录链接默认具有 Tailwind 类 underline。要自定义,您可以传递任何想要的 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:登录后应重定向到的 URLuser_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)。请参阅 许可证文件 了解更多信息。
