michalsn / codeigniter-passage
Passage integration for the CodeIgniter 4 framework
Installs: 10
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 3
pkg:composer/michalsn/codeigniter-passage
Requires
- php: ^8.0
- firebase/php-jwt: ^6.8
- guzzlehttp/guzzle: ^7.0.1
- phpfastcache/phpfastcache: ^9.1
Requires (Dev)
- codeigniter4/devkit: ^1.0
- codeigniter4/framework: ^4.2
- rector/rector: 0.17.6
This package is auto-updated.
Last update: 2025-10-05 21:41:42 UTC
README
Basic integration for Passage - passwordless authentication powered by passkeys.
Installation
Composer
composer require michalsn/codeigniter-passage
Manually
In the example below we will assume, that files from this project will be located in app/ThirdParty/passage directory.
Download this project and then enable it by editing the app/Config/Autoload.php file and adding the Michalsn\CodeIgniterPassage namespace to the $psr4 array, like in the below example:
<?php namespace Config; use CodeIgniter\Config\AutoloadConfig; class Autoload extends AutoloadConfig { // ... public $psr4 = [ APP_NAMESPACE => APPPATH, // For custom app namespace 'Config' => APPPATH . 'Config', 'Michalsn\CodeIgniterPassage' => APPPATH . 'ThirdParty/passage/src', ]; // ...
Also add the required helper to the same file under $files array:
// ... public $files = [ APPPATH . 'ThirdParty/passage/src/Common.php', ]; // ...
Configuration
- Follow the quickstart
- Create an app in the Passage Console
php spark passage:publish- to copy config file to theAppnamespace- Fill the config variables or use .env file
- Add a Passage Element to your frontend
- You can use
passageStatelessfilter as your middleware implementation
Helper functions
passageAppId()will return your AppIdpassageId()will return your user id (if you're usingpassageStatelessfilter), you can also set this yourself via:passageId($userId)
Example
<?php namespace App\Controllers; use Michalsn\CodeIgniterPassage\Exceptions\PassageException; class Home extends BaseController { public function index() { try { $passage = service('passage'); $userId = $passage->authenticateRequest($this->request); $data = ['user' => $passage->user->get($userId)]; } catch (PassageException $e) { return $this->response->setHeader(401)->setBody('401 Unauthorized'); } return view('home/index', $data); } }