wamesk / laravel-auth
OAuth2 授权与 API 端点。还包括注册流程、登录、密码重置、电子邮件验证。
3.0.8
2024-01-15 15:21 UTC
Requires
- hisorange/browser-detect: ^4.0
- laravel/passport: ^v11.5.0
- laravel/socialite: *
- pusher/pusher-php-server: *
- socialiteproviders/github: ^4.1
- socialiteproviders/google: ^4.1
- spatie/eloquent-sortable: ^4.0.1
- spatie/laravel-activitylog: ^4.7.2
- wamesk/laravel-api-response: ^1.0.1
- wamesk/laravel-validator: *
README
OAuth2 授权与 API 端点。
还包括注册流程、登录、密码重置、电子邮件验证。
配置
composer require wamesk/laravel-auth
将服务提供者添加到 config/app.php
文件中的提供者数组
'providers' => [ ... /* * Third Party Service Providers... */ \Wame\LaravelAuth\LaravelAuthServiceProvider::class, ];
使用以下命令安装包
php artisan wame:auth
将 app/Models/User.php
中的 extends
方法更改为 Wame\LaravelAuth\Models\BaseUser
<?php namespace App\Models; use Illuminate\Database\Eloquent\Concerns\HasUlids; use Wame\LaravelAuth\Models\BaseUser; class User extends BaseUser { use HasUlids; }
修改 config/auth.php
文件
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], // Add lines below 'api' => [ 'driver' => 'passport', 'provider' => 'users', ], ],
修改 config/passport.php
文件
'guard' => 'api', // Change value to 'api' 'password_grant_client' => [ // Password Grant Client - Login/Registration 'id' => env('PASSPORT_PASSWORD_GRANT_CLIENT_ID'), 'secret' => env('PASSPORT_PASSWORD_GRANT_CLIENT_SECRET'), ], 'personal_access_client' => [ // Personal Access Client - Social 'id' => env('PASSPORT_PERSONAL_ACCESS_CLIENT_ID'), 'secret' => env('PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET'), ],
修改迁移文件 database/migrations/2023_01_17_074644_create_activity_log_table.php
$table->bigIncrements('id'); $table->string('log_name')->nullable(); $table->text('description'); $table->nullableUlidMorphs('subject', 'subject'); // <-- Change to this value $table->nullableUlidMorphs('causer', 'causer'); // <-- Change to this value $table->json('properties')->nullable(); $table->timestamps(); $table->index('log_name');
可选:修改 config/eloquent-sortable.php
文件
'order_column_name' => 'sort_order',
运行迁移
php artisan migrate
设置 OAuth2
php artisan passport:install
在 .env
文件中设置 passport 输出
PASSPORT_PERSONAL_ACCESS_CLIENT_ID=<"OUTPUT-PERSONAL-CLIENT-ID"> PASSPORT_PERSONAL_ACCESS_CLIENT_SECRET=<"OUTPUT-PERSONAL-CLIENT-SECRET"> PASSPORT_PASSWORD_GRANT_CLIENT_ID=<"OUTPUT-GRANT-CLIENT-ID"> PASSPORT_PASSWORD_GRANT_CLIENT_SECRET=<"OUTPUT-GRANT-CLIENT-SECRET">
配置
这是将在 config/wame-auth.php
文件中发布的文件内容
<?php use Illuminate\Validation\Rules\Password; return [ // User Model 'model' => \Wame\LaravelAuth\Models\BaseUser::class, /* Login Options */ 'login' => [ // Determine if login should be possible. 'enabled' => true, // Enable this if only verified users can log in. 'only_verified' => false, // Additional parameters to login request 'additional_body_params' => [ // Example: 'app_version' => 'required|string|min:1' ] ], /* Register Options */ 'register' => [ // Determine if registration should be possible. 'enabled' => true, // Enable this if verification link should be sent after successful registration. 'email_verification' => true, // Determine rules for password 'password_rules' => [ 'required', 'string', Password::min(8) ->mixedCase() ->numbers() ->symbols() ->uncompromised(), 'confirmed' ], // Additional parameters to register request 'additional_body_params' => [ // Example: 'app_version' => 'required|string|min:1' ] ], /* Email verification Options */ 'email_verification' => [ // Determine if email verification should be enabled. 'enabled' => true, // The number of minutes the verification link is valid 'verification_link_expires_after' => 120 ], /* Routing Options */ 'route' => [ 'prefix' => 'api/v1' ] ];
发布视图
php artisan vendor:publish --provider="Wame\LaravelAuth\LaravelAuthServiceProvider" --tag="views"
发布翻译
php artisan vendor:publish --provider="Wame\LaravelAuth\LaravelAuthServiceProvider" --tag="translations"
修改/扩展
编辑/添加函数和文档
- 根据下面的文档示例创建控制器
AuthController.php
class AuthController extends LaravelAuthController
- 从
vendor/wamesk/laravel-auth/routes/api.php
复制到routes/api.php
Route::controller(\App\Http\Controllers\v1\AuthController::class)->prefix('v1')->name('auth.') ->group(function () { if (config('wame-auth.register.enabled')) { Route::post('/register', 'register')->name('register'); } if (config('wame-auth.login.enabled')) { Route::post('/login', 'login')->name('login'); Route::middleware('auth:api')->post('/logout', 'logout')->name('logout'); } if (config('wame-auth.email_verification.enabled')) { Route::post('/email/send_verification_link', 'sendVerificationLink')->name('verify.send_verification_link'); } Route::post('/password/reset/send', 'sendPasswordReset')->name('password.reset.send'); Route::post('/password/reset', 'validatePasswordReset')->name('password.reset'); if (config('wame-auth.social.enabled')) { Route::post('/login/{provider}', 'socialLogin')->name('social-login'); } });
向函数 Example 添加文档:app/Http/Controllers/v1/AuthController.php
class AuthController extends LaravelAuthController { /* Here will be the documentation for register */ public function register(Request $request): JsonResponse { return parent::register($request); }
向登录响应添加数据/编辑函数 Example:app/Http/Controllers/v1/AuthController.php
public function login(Request $request): JsonResponse { $return = parent::login($request); $data = $return->getData(); $personal_number = User::whereId($data->data->user->id)->first()->personal_number; $data->data->user->personal_number = $personal_number; $return->setData($data); return $return; }
示例:如何通过 Observer 使用参数添加注册
public function handle(UserCreatingEvent $event) { $user = $event->entity; $user->team_id = request()->team_id; $user->approve ?: $user->approve = 0; }