tecnomanu/unilogin-laravel-lumen

通过魔法链接实现的通用身份验证包

v0.1.0 2023-06-02 19:01 UTC

This package is auto-updated.

Last update: 2024-08-31 00:35:57 UTC


README

UniLogin 是一个 Laravel/Lumen 包,允许用户通过魔法链接登录到 Web 应用程序。这意味着用户不需要记住密码即可登录,只需点击发送到其电子邮件的链接即可。

索引

  1. 简介
  2. 安装
  3. 配置
  4. 用法
  5. API
  6. 高级定制
  7. 错误处理
  8. 贡献

简介

UniLogin 允许您在 Laravel 或 Lumen 应用程序中实现魔法链接登录。这种登录方式基于向用户发送链接,当用户点击该链接时,会自动将用户登录到您的应用程序。

安装

UniLogin 的安装非常简单。您可以在 Laravel 或 Lumen 应用程序中安装它

Laravel

  1. 运行以下命令

    composer require tecnomanu/unilogin

  2. 发布配置文件和视图

    php artisan vendor:publish --provider="Tecnomanu\UniLogin\LaravelServiceProvider"

Lumen

  1. 运行以下命令

    composer require tecnomanu/unilogin

  2. 复制配置文件和视图

    php artisan unilogin:copy-views

配置

一旦安装了该包,您可以通过 config/unilogin.php 文件或直接在您的 .env 文件中配置它。

  • UNILOGIN_SECRET:生成魔法链接的密钥。您可以使用 php artisan unilogin:create-secret 命令生成它。默认:空。
  • UNILOGIN_TOKEN_LIFETIME:魔法链接令牌的有效期(秒)。默认:900(15分钟)。
  • UNILOGIN_CALLBACK_URL:成功登录后应用程序应重定向到的 URL。默认:空。
  • UNILOGIN_API_BASE_PATH:API 的基本路径。默认:空。

Lumen 的其他配置

如果您正在使用 Lumen,则需要添加一些额外的配置才能使该包正常工作。

在您的 bootstrap/app.php 文件中添加以下行

$app->alias('view', Illuminate\View\Factory::class);

$app->alias('mailer', \Illuminate\Contracts\Mail\Mailer::class);
$app->alias('mail.manager', Illuminate\Mail\MailManager::class);
$app->alias('mail.manager', Illuminate\Contracts\Mail\Factory::class);
$app->alias('Notification', Illuminate\Support\Facades\Notification::class);

$app->configure('mail');
$app->configure('view');

用法

  1. 中间件

要使用 UniLogin 魔法链接,您需要使用包中提供的中间件。您可以在您的 web.phpapi.php 路由文件中添加中间件

Route::get('/login-success', function (Request $request) {     
    // Receive from request "email";

    // Your login logic here. 
    // ...
    // Or use this example
    $user = User::where('email', $request->email)->first();
    Auth::login($user);
    return redirect('/');

})->middleware('unilogin.success');

API

UniLogin 包含一些预配置的路由,用于处理魔法链接登录过程的各个阶段。以下是这些路由

  • POST /unilogin:将魔法链接发送到用户的电子邮件。
  • GET /unilogin/polling:检查魔法链接是否被点击。
  • GET /unilogin/callback:处理魔法链接的回调。
  • GET /unilogin/error:显示登录失败的错误消息。
  • GET /unilogin/invalid-session:显示会话无效的消息。
  • GET /unilogin/success:处理成功登录。

高级定制

随着您对 UniLogin 包的集成和使用,您可能需要根据您的项目进行调整。在本节中,我们将探讨一些最常用的定制 UniLogin 的方法。

  1. 中间件

    UniLogin 包包含一个自定义中间件:SuccessTokenMiddleware。此中间件处理 SUCCESS 类型的令牌并将用户的电子邮件添加到请求中。您可能需要自定义此中间件,例如,如果您需要向请求中添加更多字段。

    以下是如何自定义此中间件以向请求中添加 'company_id' 字段的示例

    // SuccessTokenMiddleware.php  //... 
    public function handle(Request $request, Closure $next) {     
        // ...     
        $credentials = $request->get('credentials');      
        
        // Merge additional fields to the request     
        
        $request->merge([
            'email' => $credentials['email'], 
            'company_id' => $credentials['company_id'] 
        // New field     
        ]);          
        return $next($request); 
    } 
    //...
  2. 视图

    视图是您可以自定义UniLogin的另一个区域。错误、无效会话和成功视图可以根据您项目的需求进行自定义。您可以使用unilogin:copy-views命令将视图复制到您的应用程序中,并做出必要的更改。

错误处理

错误处理对于提供顺畅和一致的用户体验至关重要。UniLogin包内置了一个错误处理系统,根据发生的错误抛出不同类型的异常。

在大多数情况下,UniLogin包返回一个包含错误描述和HTTP状态码的JSON响应。例如,如果令牌已过期,它将返回一个状态为'error'的JSON响应和相应的消息。

如果您需要一个更定制的错误处理系统,可以考虑编辑中间件中抛出异常的函数。

贡献

如果您想为UniLogin的开发做出贡献,可以按照以下步骤操作

  1. 在GitHub上Fork该存储库。
  2. 将您的Fork克隆到本地机器上。
  3. 在本地存储库中创建一个新分支。
  4. 在新分支中进行更改。
  5. 将更改推送到GitHub上的您的Fork。
  6. 从您的Fork向主UniLogin存储库发起拉取请求。
  7. 经过审查和必要的讨论后,您的更改可能会被合并到主分支。

在发起拉取请求之前,请确保检查现有问题和拉取请求,以避免重复。此外,请遵循现有的编码标准和约定。

感谢您对为UniLogin做出贡献的兴趣!