grosv / laravel-passwordless-login
使用临时签名URL进行无密码登录
Requires
- php: ^7.3|^8.0
- illuminate/support: ^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^6.0|^8.0|^9.0
README
为Laravel提供一个简单、安全的魔法登录链接生成器
此包提供了一个临时签名路由,用于登录用户。它不提供将链接发送到路由以供用户使用的功能。这是因为我不想对您与用户沟通的方式做任何假设。
安装
composer require grosv/laravel-passwordless-login
简单用法
use App\User; use Grosv\LaravelPasswordlessLogin\LoginUrl; function sendLoginLink() { $user = User::find(1); $generator = new LoginUrl($user); $generator->setRedirectUrl('/somewhere/else'); // Override the default url to redirect to after login $url = $generator->generate(); //OR Use a Facade $url = PasswordlessLogin::forUser($user)->generate(); // Send $url in an email or text message to your user }
使用特性
由于一些网站有多个用户类型模型(用户、管理员等),您可以使用特性来设置每种用户类型的默认配置。以下方法是特性提供的,因此您只需要包含您想使用不同值的那些方法。
use Grosv\LaravelPasswordlessLogin\Traits\PasswordlessLogin; use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { use PasswordlessLogin; public function getGuardNameAttribute(): string { return config('laravel-passwordless-login.user_guard'); } public function getShouldRememberLoginAttribute(): bool { return config('laravel-passwordless-login.remember_login'); } public function getLoginRouteExpiresInAttribute(): int { return config('laravel-passwordless-login.login_route_expires'); } public function getRedirectUrlAttribute(): string { return config('laravel-passwordless-login.redirect_on_success'); } }
如果您使用PasswordlessLogin特性,可以通过在要登录的用户上调用createPasswordlessLoginLink()来使用特性中定义的默认值生成链接。
我认为有人可能会犯的最大错误是为一用户创建登录链接并将其发送给另一用户。请小心并测试您的代码。我不想因为别人的愚蠢而被人责怪。
配置
您可以将配置文件发布出来,或者只需在.env文件中设置您想使用的值
LPL_USER_MODEL=App\User LPL_REMEMBER_LOGIN=false LPL_LOGIN_ROUTE=/magic-login LPL_LOGIN_ROUTE_NAME=magic-login LPL_LOGIN_ROUTE_EXPIRES=30 LPL_REDIRECT_ON_LOGIN=/ LPL_USER_GUARD=web LPL_USE_ONCE=false LPL_INVALID_SIGNATURE_MESSAGE="Expired or Invalid Link"
LPL_USER_MODEL 是您要登录的认证模型(通常是 App\User)
LPL_REMEMBER_LOGIN 表示您是否希望记住登录(类似于用户勾选“记住我”)
LPL_LOGIN_ROUTE 是指向此包提供的登录函数的路由。请确保您不会与您的其他路由发生冲突。
LPL_LOGIN_ROUTE_NAME 是 LPL_LOGIN_ROUTE 的名称。再次强调,请确保它不会与您的现有路由名称发生冲突。
LPL_LOGIN_ROUTE_EXPIRES 是链接有效的时间(以分钟为单位)。我建议您设置最适合您用例的最短时间值。
LPL_REDIRECT_ON_LOGIN 是用户点击他们的魔法链接后要发送到的地方。
LPL_USE_ONCE 表示您是否希望链接在首次使用后过期(使用缓存来存储已使用的链接)
LPL_INVALID_SIGNATURE_MESSAGE 是当我们在无效或过期的链接上使用 401 状态码终止时发送的自定义消息。您还可以通过在 Handler.php 文件中处理 InvalidSignatureException 和 ExpiredSignatureException 来添加一些自定义逻辑来处理无效或过期的链接。
报告问题
对于安全问题,请直接通过ed@gros.co给我发邮件。对于任何其他问题,请使用此处的 issue 跟踪器。
贡献
我欢迎社区帮助改进和维护我所有的包。只需互相友好相处。记住,我们都在尽力而为。