uzairports / uzair-id
描述
1.0.6
2024-07-29 04:49 UTC
Requires
- php: ^8.2
- laravel/socialite: ^5.14
README
安装
composer require uzairports/uzair-id
php artisan vendor:publish --provider=Uzairports\Uzairid\Providers\UzairServiceProvider
php artisan migrate
配置
添加 config/services.php
'uzairports' => [ 'client_id' => env('UZAIR_CLIENT_ID'), 'client_secret' => env('UZAIR_CLIENT_SECRET'), 'redirect' => env('UZAIR_CALLBACK_URL'), ],
认证
添加路由
Route::get('/auth/redirect', [App\Http\Controllers\OAuthController::class, 'redirect'])->name('login'); Route::get('/auth/callback', [App\Http\Controllers\OAuthController::class, 'callback'])->name('callback'); Route::post('/auth/logout', [App\Http\Controllers\OAuthController::class, 'logout'])->name('logout');
在 OAuthController.php 中添加
<?php namespace App\Http\Controllers; use App\Models\User; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Http; use Laravel\Socialite\Facades\Socialite; class OAuthController extends Controller { public function redirect() { return Socialite::driver('uzairports')->redirect(); } public function callback() { $uzairUser = Socialite::driver('uzairports')->user(); $user = User::query() ->firstOrCreate( ['email' => $uzairUser->getEmail()], [ 'email' => $uzairUser->getEmail(), 'name' => $uzairUser->getName(), ] ); auth()->login($user); auth()->user()->token()->delete(); auth()->user()->token()->create([ 'access_token' => $uzairUser->token, 'refresh_token' => $uzairUser->refreshToken, 'expires_in' => $uzairUser->expiresIn, ]); return to_route('dashboard'); } public function logout(Request $request) { if (auth()->user()->token) { Http::withToken(auth()->user()->token->access_token)->post('https://my.uzairports.com/api/v1/oauth/logout'); auth()->user()->token()->delete(); } Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return $request->wantsJson() ? new JsonResponse([], 204) : redirect('/'); } }
在 User.php 中添加
public function token() { return $this->hasOne(OauthToken::class); }