lbausch/flarum-laravel-session

在 Laravel 应用中使用 Flarum 的会话。

0.5.0 2023-10-22 11:00 UTC

This package is auto-updated.

Last update: 2024-09-22 13:03:22 UTC


README

tests codecov

功能描述

本包允许在 Laravel 应用中进行身份验证时使用 Flarum 的会话。它访问 Flarum 的会话 Cookie 并从会话存储中读取会话数据。根据 Flarum 用户数据库中的用户信息,在 Laravel 应用中创建/更新并登录用户。

要求

  • PHP 8.1+
  • Laravel 10
  • 在 Laravel 应用相同的文件系统中安装 Flarum,以便可以读取 Flarum 的会话文件
  • Flarum 和 Laravel 需要共享相同的域名/子域名,以便可以访问 Flarum 的会话 Cookie

安装和配置

Composer

使用 Composer 安装包

composer require lbausch/flarum-laravel-session

注册中间件

app/Http/Kernel.php 中注册 \Bausch\FlarumLaravelSession\FlarumSessionMiddleware 中间件

/**
 * The application's middleware aliases.
 *
 * Aliases may be used instead of class names to conveniently assign middleware to routes and groups.
 *
 * @var array<string, class-string|string>
 */
protected $middlewareAliases = [
    // ...
    'flarum' => \Bausch\FlarumLaravelSession\FlarumSessionMiddleware::class,
    // ...
];

设置数据库连接

config/database.php 中定义 Flarum 数据库的数据库连接

'flarum' => [
    'driver' => 'mysql',
    'url' => env('FLARUM_DATABASE_URL'),
    'host' => env('FLARUM_DB_HOST', '127.0.0.1'),
    'port' => env('FLARUM_DB_PORT', '3306'),
    'database' => env('FLARUM_DB_DATABASE', 'forge'),
    'username' => env('FLARUM_DB_USERNAME', 'forge'),
    'password' => env('FLARUM_DB_PASSWORD', ''),
    'unix_socket' => env('FLARUM_DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'prefix_indexes' => true,
    'strict' => true,
    'engine' => null,
    'options' => extension_loaded('pdo_mysql') ? array_filter([
        PDO::MYSQL_ATTR_SSL_CA => env('FLARUM_MYSQL_ATTR_SSL_CA'),
    ]) : [],
],

发布包配置

使用 php artisan vendor:publish --provider=Bausch\\FlarumLaravelSession\\ServiceProvider 发布包配置,并使用您的设置更新 config/flarum.php

禁用 Cookie 加密

为了避免 Laravel 尝试加密 Flarum 的会话 Cookie,请将以下内容添加到 app/Http/Middleware/EncryptCookies.php

/**
 * The names of the cookies that should not be encrypted.
 *
 * @var array<int, string>
 */
protected $except = [
    'flarum_session',
];

使用方法

设置中间件

routes/web.php 中,您可以按需分配中间件

Route::middleware(['flarum'])->group(function () {
    Route::get('/', function () {
        return view('welcome');
    });
});

然后,所有对 / 路由的请求将由中间件进行检查。

处理已识别的用户

一旦中间件成功识别了用户,它将执行默认处理器 \Bausch\FlarumLaravelSession\Actions\HandleIdentifiedUser。您可以通过在服务提供器中调用 FlarumLaravelSession::handleIdentifiedUser() 来配置不同的处理器。这是一个更新属性或执行其他操作的理想场所,只需记住实现 \Bausch\FlarumLaravelSession\Contracts\FlarumUserIdentified 接口。参考默认处理器以获取实现示例。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Bausch\FlarumLaravelSession\FlarumLaravelSession;
use App\Handlers\YourCustomHandler;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     */
    public function register(): void
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot(): void
    {
        FlarumLaravelSession::handleIdentifiedUser(YourCustomHandler::class);
    }
}

如果您需要使用不同于 App\Models\User 的不同用户模型,您可以在服务提供器中调用 FlarumLaravelSession::useUserModel(YourUser::class)

从不同域名访问 Flarum 会话 Cookie

如果 Flarum 运行在 domain.tld 且 Laravel 在 sub.domain.tld,您需要配置 Flarum(config.php),以便可以在子域名上访问会话 Cookie

// Note the dot before domain.tld
'cookie' => ['domain' => '.domain.tld'],