Basic integration for Passage - passwordless authentication powered by passkeys.
composer require michalsn/codeigniter-passage
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',
];
// ...
- 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
passageAppId()
will return your AppIdpassageId()
will return your user id (if you're usingpassageStateless
filter), you can also set this yourself via:passageId($userId)
<?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);
}
}