chivincent / laravel-kratos
Laravel Kratos 与 ory/kratos 集成认证功能
v1.2.0
2023-07-25 07:22 UTC
Requires
- php: ^8.1||^8.2
- illuminate/support: ^10
- ory/kratos-client-php: ^0.13.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.22
- orchestra/testbench: ^8.5
- phpunit/phpunit: ^9.6
README
简介
Laravel Kratos 将认证功能与 ory/kratos 集成。
需求
- 我正在使用 Laravel 构建 API。
- 由于 Kratos 已经实施,我没有使用 Laravel 内置的认证功能。
- 未来也不会使用它们。
- 前端是独立的项目
- 前端通过 Kratos 服务器进行认证,并接收
ory_kratos_session
cookie。 - 前端使用带有
ory_kratos_session
cookie 的请求对 Laravel API 进行调用。
- 前端通过 Kratos 服务器进行认证,并接收
安装
composer require chivincent/laravel-kratos
配置
php artisan vendor:publish --provider="Chivincent\LaravelKratos\KratosServiceProvider"
-
检查
config/kratos.php
,确保 Kratos 服务的端点。 -
更新
config/auth.php
<?php return [ // ... 'guards' => [ 'kratos' => [ 'driver' => 'kratos', 'provider' => 'kratos', // or 'kratos-database' ], ], // ... ];
- 更新
config/cors.php
<?php return [ // ... 'allowed_origins' => ['http://127.0.0.1:4455'], // Port 4455 is the default application of Kratos Frontend UI // ... 'supports_credentials' => true, // ... ];
数据库配置
如果使用 kratos-database
作为 auth.guards.kratos.provider
的 UserProvider,则设置默认用户模型的连接非常有用。
- 更新
config/database.php
,以下是一个 Postgresql 的示例
<?php return [ // ... 'connections' => [ 'kratos' => [ // connection name should as same as `config('kratos.user_providers.kratos-database.connection')` 'driver' => 'pgsql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_KRATOS_DATABASE', 'kratos'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'charset' => 'utf8', 'prefix' => '', 'prefix_indexes' => true, 'search_path' => 'public', 'sslmode' => 'prefer', ], ] // ... ];
必须验证邮箱
Laravel 使用 Illuminate\Contracts\Auth\MustVerifyEmail
来检查用户的邮箱是否已验证。
可以通过扩展模型轻松实现 implements Illuminate\Contracts\Auth\MustVerifyEmail
// app/Models/User.php use Chivincent\LaravelKratos\Models\KratosIdentity; use Chivincent\LaravelKratos\Models\KratosUser; use Illuminate\Contracts\Auth\MustVerifyEmail; // If using "kratos" user provider: class User extends KratosIdentity implements MustVerifyEmail { } // If using "kratos-database" user provider: //class User extends KratosUser implements MustVerifyEmail //{ //}
用法
在 routes/api.php
Route::middleware('auth:kratos') ->get('user', fn (Request $request) => response()->json($request->user()));