oneofftech / laravel-connect-identity
添加通过第三方OAuth服务进行用户注册和登录
Requires
- php: ^7.3|^8.0.2
- illuminate/auth: ^8.0|^9.0
- illuminate/console: ^8.0|^9.0
- illuminate/encryption: ^8.0|^9.0
- illuminate/support: ^8.0|^9.0
- illuminate/view: ^8.0|^9.0
- laravel/socialite: ^5.0
- socialiteproviders/dropbox: ^4.1
- socialiteproviders/gitlab: ^3.1|^4.0
Requires (Dev)
- fakerphp/faker: ^1.9.1
- friendsofphp/php-cs-fixer: ^2.16|^3.8
- mockery/mockery: ^1.4.4
- orchestra/testbench: ^6.15|^7.4
- phpunit/phpunit: ^9.5.10
README
通过第三方身份提供者(例如Gitlab、Facebook等)将注册和登录添加到您的应用程序中。
虽然该包提供了处理注册和登录操作的控制台、模型、迁移和路由,但它并未规定用户界面应该如何显示以及如何验证用户数据。然而,它提供了一个起点,您可以根据自己的需求进行定制。
该包与Laravel Socialite提供者和社区驱动的Socialite Providers兼容。
功能
- 通过第三方提供者处理用户注册;
- 通过第三方提供者处理用户登录;
- 允许现有用户链接第三方身份;
- 可定制的控制台、迁移和模型,将存在于您的应用程序命名空间中;
- 使用加密和伪匿名化在数据库中保存身份和令牌;
- 提供登录/注册/连接按钮作为Blade组件;
- 支持所有Laravel Socialite和Socialite Providers;
- 添加自定义提供者。
要求
oneofftech/laravel-connect-identity
需要Laravel >= 8.0和PHP >= 7.3。
该包目前处于开发中。 API可能会在没有通知的情况下更改,因此目前不适合生产环境。
入门
安装
您可以通过在项目的根目录下终端运行此命令通过Composer安装此包
composer require oneofftech/laravel-connect-identity
服务提供者
Oneofftech\Identities\IdentitiesServiceProvider::class
作为Laravel服务发现的一部分自动注册。
生成迁移、控制台和模型
该包通过特性提供登录和注册功能。一旦安装了oneofftech/laravel-connect-identity
包,您就可以使用ui:identities
Artisan命令生成控制台、模型和迁移脚手架。
php artisan ui:identities
现在您可以将WithIdentities
特性添加到您的User
模型中。这是在注册/登录过程中使用所需的identities
关系所必需的。
// ... use Oneofftech\Identities\WithIdentities; class User extends Authenticatable { use WithIdentities; // ... }
如果您的应用程序命名空间与
App
不同,请参阅使用个性化应用程序命名空间以获取其他必需的设置操作。
配置Socialite提供者
在使用身份提供者之前,例如facebook
、google
、github
、gitlab
,请在services
配置文件中配置所需选项。
有关特定驱动程序的配置信息,请参阅Laravel文档或Socialite Providers文档。
无需配置
redirect
URL,因为重定向URL已自动设置。
'gitlab' => [ 'client_id' => env('GITLAB_CLIENT_ID'), 'client_secret' => env('GITLAB_CLIENT_SECRET'), 'redirect' => null, // set in the controller no need to specify 'instance_uri' => env('GITLAB_INSTANCE_URI', 'https://gitlab.com/') ],
如果您正在使用社区维护的Socialite Providers之一,请记住在您的EventsServiceProvider
中注册它们的事件。
如果您没有使用这些提供者,此步骤是可选的。
oneofftech/laravel-connect-identity
提供了对gitlab
和dropbox
驱动程序的即时支持。如果您使用这两个驱动程序,您可能需要将以下调用添加到您的EventsServiceProvider
中。
public function boot() { parent::boot(); \Oneofftech\Identities\Facades\Identity::events(); }
这将注册Gitlab和Dropbox提供者默认包含的SocialiteWasCalled
事件。
包含登录和注册按钮
oneofftech/laravel-connect-identity
不会强制您的用户界面偏好,但我们提供Blade组件以便快速添加登录和注册链接/按钮。
<x-oneofftech-identity-link action="register" provider="gitlab" class="button button--primary" />
可用的action
有login
、connect
和register
。provider
指的是要使用的身份提供者,提供者的名称与Socialite提供者的名称相同。有关更多信息,请参阅Blade组件。
在出现错误的情况下,主要是与验证相关,您可以通过查看Laravel默认ErrorBag中使用的提供者键来捕获这些错误。
@error('gitlab') <span class="field-error" role="alert"> {{ $message }} </span> @enderror
深入了解
使用个性化应用程序命名空间
虽然ui:identities
命令是命名空间感知的,但一些运行时配置不是。
如果您使用自定义应用程序命名空间而不是默认的App
,您需要告诉要使用哪个命名空间和模型。
为此,在您的AppServiceProvider
中添加以下行;
use Oneofftech\Identities\Facades\Identity; class AppServiceProvider extends ServiceProvider { public function boot() { Identity::useNamespace("My\\Namespace\\"); Identity::useIdentityModel("My\\Namespace\\Identity"); Identity::useUserModel("My\\Namespace\\User"); // ... } }
向注册传递额外的数据
有时您需要额外的参数来在第三方服务的授权过程之后创建用户。为此,您可以在请求中添加尽可能多的参数,该请求将重定向到第三方服务。
默认情况下,额外的请求参数是受保护的,因此您必须明确指定它们的名称。您可以在RegisterController
上定义一个attributes
属性或一个attributes
方法来做到这一点,该方法返回一个表示允许的参数名称的字符串数组。
protected $attributes = ['name']; protected function attributes() { return ['name']; }
然后将这些额外的属性传递给在RegisterController
中定义的validator(array $data)
和create(array $data)
函数。
如果您使用提供的IdentityLink
Blade组件,则应将数据指定为关联数组,放在parameters
属性中。
<x-oneofftech-identity-link action="register" provider="gitlab" :parameters="$arrayOfAdditionalParameters" class="button button--primary" />
其中$arrayOfAdditionalParameters
是一个关联数组,例如['invite' => 'token_value']
。
数据在数据库中的存储方式
尽可能的情况下,数据以加密或伪匿名形式存储。
加密是通过使用Laravel的加密和配置的应用程序密钥(即APP_KEY
)来实现的。如果您想使用不同的密钥,请使用IDENTITY_KEY
环境变量,所使用的加密方式将与配置在app.cipher
中的加密方式相同。
伪匿名值以原始数据的哈希形式存储。
以下是敏感数据存储的方式
如果您需要旋转APP_KEY,在
OLD_IDENTITY_KEY
中指定旧密钥,以便仍然可以读取加密值。
警告目前还没有可用的自动化作业可以重新加密数据以使用新密钥。此操作在注册或连接身份作为令牌更新的一部分时发生。
贡献
感谢您考虑为Laravel的Connect Identity做出贡献!您可以在我们的贡献指南中找到如何开始的说明。
安全漏洞
请查阅我们的安全策略以了解如何报告安全漏洞。
许可
Laravel Connect Identity 采用 MIT 许可证 许可。