michalsn / codeigniter-passage
Passage integration for the CodeIgniter 4 framework
v1.0.0
2023-07-23 10:37 UTC
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: 2024-11-05 19:30:20 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 theApp
namespace- Fill the config variables or use .env file
- Add a Passage Element to your frontend
- You can use
passageStateless
filter as your middleware implementation
Helper functions
passageAppId()
will return your AppIdpassageId()
will return your user id (if you're usingpassageStateless
filter), 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); } }