michalsn/codeigniter-passage

CodeIgniter 4 框架的 Passage 集成

v1.0.0 2023-07-23 10:37 UTC

README

Passage 的基本集成 - 由 passkeys 提供的无密码身份验证 Passage

PHPUnit PHPStan Deptrac

PHP CodeIgniter

安装

Composer

composer require michalsn/codeigniter-passage

手动

以下示例中,我们假设此项目的文件位于 app/ThirdParty/passage 目录。

下载此项目,然后通过编辑 app/Config/Autoload.php 文件并添加 Michalsn\CodeIgniterPassage 命名空间到 $psr4 数组来启用它,如下例所示

<?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',
    ];

    // ...

同时,将所需的辅助程序添加到同一文件下的 $files 数组中

    // ...
    public $files = [
        APPPATH . 'ThirdParty/passage/src/Common.php',
    ];

    // ...

配置

  • 按照 快速入门 进行操作
  • 在 Passage 控制台中创建一个应用
    • php spark passage:publish - 将配置文件复制到 App 命名空间
    • 填写配置变量或使用 .env 文件
  • 将 Passage 元素添加到您的前端
  • 您可以使用 passageStateless 过滤器作为您的中间件实现

辅助函数

  • passageAppId() 将返回您的 AppId
  • passageId() 将返回您的用户 id(如果您使用的是 passageStateless 过滤器),您也可以通过以下方式自行设置: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);
    }
}