advanced-solutions / iceland-electronic-id
为islands.is社交ite集成的Laravel软件包
1.0.8
2024-07-31 15:54 UTC
Requires
- php: ^7.4|^8.0
- ext-json: *
- guzzlehttp/guzzle: ^7.0
- illuminate/support: ^8.0|^9.0|^10.0
README
此包为Laravel Socialite提供了与冰岛电子身份系统的集成。
安装
-
使用Composer要求包
composer require advanced-solutions/iceland-electronic-id
-
发布配置文件
php artisan vendor:publish --provider="AdvancedSolutions\IcelandElectronicId\IslandsServiceProvider"
-
将冰岛电子身份配置添加到您的
ISLANDS_CLIENT_ID=your-client-id ISLANDS_CLIENT_SECRET=your-client-secret ISLANDS_REDIRECT_URI=your-redirect-uri
-
将配置添加到
config/services.php:
'islands' => [ 'client_id' => env('ISLANDS_CLIENT_ID'), 'client_secret' => env('ISLANDS_CLIENT_SECRET'), 'redirect' => env('ISLANDS_REDIRECT_URI'), ],
用法
- 将路由添加到您的api.php(例如)
use Illuminate\Support\Facades\Route; use App\Http\Controllers\Auth\LoginController; Route::get('login/islands', [LoginController::class, 'redirectToIslands']); Route::get('login/islands/callback', [LoginController::class, 'handleIslandsCallback']);
- 更新您的LoginController
class AuthController extends Controller { protected $islandsService; public function __construct(IslandsService $islandsService) { $this->islandsService = $islandsService; } public function redirectToIslands() { $query = http_build_query([ 'client_id' => config('islands.client_id'), 'redirect_uri' => config('islands.redirect_uri'), 'response_type' => 'code', 'scope' => 'openid profile', 'state' => csrf_token(), ]); return redirect('https://identity-server.staging01.devland.is/connect/authorize?' . $query); } public function handleIslandsCallback(Request $request) { $code = $request->get('code'); try { $tokenData = $this->islandsService->authenticate($code); $userInfo = $this->islandsService->getUserInfo($tokenData['access_token']); // Find or create user logic $user = User::firstOrCreate( ['email' => $userInfo['email']], ['name' => $userInfo['name']] ); Auth::login($user, true); return redirect()->intended('dashboard'); } catch (\Exception $e) { return redirect('/login')->withErrors(['error' => $e->getMessage()]); } } }
- 如有必要,更新用户模型
... class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; }
测试
要测试冰岛电子身份集成,只需导航到登录路由
http://your-app-url/login/islands