lbausch / flarum-laravel-session
在 Laravel 应用中使用 Flarum 的会话。
Requires
- php: ^8.1
- illuminate/auth: ^10.0
- illuminate/filesystem: ^10.0
- illuminate/http: ^10.0
- illuminate/session: ^10.0
- illuminate/support: ^10.0
Requires (Dev)
- orchestra/testbench: ^8.13
- phpunit/phpunit: ^10.4
This package is auto-updated.
Last update: 2024-09-22 13:03:22 UTC
README
功能描述
本包允许在 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'],