advanced-solutions/iceland-electronic-id

为islands.is社交ite集成的Laravel软件包

1.0.8 2024-07-31 15:54 UTC

This package is auto-updated.

Last update: 2024-10-01 00:11:40 UTC


README

此包为Laravel Socialite提供了与冰岛电子身份系统的集成。

安装

  1. 使用Composer要求包

    composer require advanced-solutions/iceland-electronic-id
  2. 发布配置文件

    php artisan vendor:publish --provider="AdvancedSolutions\IcelandElectronicId\IslandsServiceProvider"
  3. 将冰岛电子身份配置添加到您的

    ISLANDS_CLIENT_ID=your-client-id
    ISLANDS_CLIENT_SECRET=your-client-secret
    ISLANDS_REDIRECT_URI=your-redirect-uri
  4. 将配置添加到 config/services.php:

    'islands' => [
    'client_id' => env('ISLANDS_CLIENT_ID'),
    'client_secret' => env('ISLANDS_CLIENT_SECRET'),
    'redirect' => env('ISLANDS_REDIRECT_URI'),
    ],

用法

  1. 将路由添加到您的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']);
  2. 更新您的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()]);
           }
       }
    }
  3. 如有必要,更新用户模型
    ...
    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