oneofftech/laravel-connect-identity

添加通过第三方OAuth服务进行用户注册和登录

v0.3.3 2022-05-04 12:43 UTC

This package is auto-updated.

Last update: 2024-09-17 20:38:05 UTC


README

CI

通过第三方身份提供者(例如Gitlab、Facebook等)将注册和登录添加到您的应用程序中。

虽然该包提供了处理注册和登录操作的控制台、模型、迁移和路由,但它并未规定用户界面应该如何显示以及如何验证用户数据。然而,它提供了一个起点,您可以根据自己的需求进行定制。

该包与Laravel Socialite提供者和社区驱动的Socialite Providers兼容。

功能

  • 通过第三方提供者处理用户注册;
  • 通过第三方提供者处理用户登录;
  • 允许现有用户链接第三方身份;
  • 可定制的控制台、迁移和模型,将存在于您的应用程序命名空间中;
  • 使用加密和伪匿名化在数据库中保存身份和令牌;
  • 提供登录/注册/连接按钮作为Blade组件;
  • 支持所有Laravel SocialiteSocialite Providers
  • 添加自定义提供者。

要求

oneofftech/laravel-connect-identity需要Laravel >= 8.0PHP >= 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提供者

在使用身份提供者之前,例如facebookgooglegithubgitlab,请在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提供了对gitlabdropbox驱动程序的即时支持。如果您使用这两个驱动程序,您可能需要将以下调用添加到您的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" />

可用的actionloginconnectregisterprovider指的是要使用的身份提供者,提供者的名称与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 许可证 许可。