glaivepro/invytr

Laravel 用户邀请包

1.0.10 2023-03-06 22:28 UTC

This package is auto-updated.

Last update: 2024-09-21 23:50:15 UTC


README

Build Status

当在用户创建而不是注册自己的网站上,你会面临一个挑战,即如何安全地给用户访问他们新创建的账户的权限。Invytr 通过发送包含设置账户密码链接的电子邮件来解决这个问题。

此包主要用于与 Laravel 的认证框架和密码重置机制一起使用。

使用方法

安装它

$ composer require glaivepro/invytr

现在您可以向用户发送邀请。他们将会收到一个带有密码设置链接的电子邮件。

// $user must extend Illuminate\Foundation\Auth\User
// Laravel's \App\User does this by default

\Invytr::invite($user);

自定义

邀请过期

默认情况下,邀请令牌将与密码重置一起过期。默认的 60 分钟通常对被邀请的用户来说不够,因为他们可能不会在收到邀请后立即注册。

要增加邀请的过期时间,您应该在 config/auth.php 中的 passwords.users 路径下添加 invites_expire 键。现在您不需要发布任何内容。只需像这样添加分钟数即可

'passwords' => [
	'users' => [
		'provider' => 'users',
		'table' => 'password_resets',
		'expire' => 60,
		'invites_expire' => 4320,  // This let's invites be valid for 3 days
	],
],

自定义文本和本地化

您可以通过在 resources/lang 中找到的 JSON 本地化文件中自定义/本地化字符串。

邀请电子邮件使用以下字符串

  • Account created 作为主题。
  • An account for you has been created! Please set a password for your account! 作为文本。
  • Set Password 作为操作链接。

密码设置页面只使用一个字符串

  • Set Password 作为面板标题(而不是 Reset Password)。

对设置尝试的响应使用这些字符串

  • 您的密码已设置!
  • 密码必须至少有六个字符,并且与确认密码匹配。
  • 此令牌无效。
  • 我们找不到具有该电子邮件地址的用户。

电子邮件

类似于 Laravel 的重置密码功能,您可以在用户模型上创建一个 sendPasswordSetNotification 方法。

public function sendPasswordSetNotification($token)
{
	// By default we send this:
	\Notification::send($this, new \GlaivePro\Invytr\Notifications\SetPassword($token));
}

视图

默认情况下,此包使用与 Laravel 的重置功能相同的 auth.passwords.reset 视图。如果您需要更多自定义,请创建一个 auth.passwords.set 视图,其中包含所有相同的字段,并发布与 auth.passwords.reset 相同的请求。

密码设置和响应

重置是通过 Laravel 的 password.update 路由进行的,并由 App\Http\Controllers\Auth\ResetPasswordController 上的 reset 方法处理。

如果您想自定义处理和/或响应,请编辑该方法。您可以通过检查会话来区分设置和重置请求。

// in the ResetPasswordController

public function reset(Request $request)
{
	// something something
	
	if ($request->session()->has('invytr'))
	{
		// this is an invited user setting the password
	}
	
	// something else
}

警告

运行 php artisan auth:clear-resets 也会清除您的过期邀请令牌,如果它们根据 auth.passwords.users.expire 配置值过期。您的 auth.passwords.users.invites_expire 配置值将被忽略。

变更日志

1.0 是此包的初始版本。支持 Laravel 5.7 和 PHP 7.1 以及 PHP 7.2。

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

待办事项

添加一个特质,在创建新用户时设置随机密码并发送邀请。

尝试通过调整创建令牌时的 created_at 而不是现在的做法来设置过期时间。

发布语言文件?

改进测试,

  • 通过单元测试全面覆盖 Invytr、控制器和中间件
  • 单元测试通知中创建的 URL
  • 为密码设置页面创建更多功能测试。

提高代码质量和一致性。

  • 修复文档注释。
  • 导入与完全限定的类名。
  • 排序导入。
  • 链式操作时的对齐...也许可以使用styleCI?
  • 单行控制结构中的花括号与无花括号。
  • 辅助函数与外观模式与...
  • 示例:config() 与 $request->session() 与 \View:

也许可以扩大范围,提供类似于MustResetPasswordOnNextVisit特性?或者那是一个单独的包?

许可证

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