deisss / slim-auth
PHP Slim 框架的抽象 HTTP Basic Auth 中间件,提供简单的自定义数据库模式,以及 URL 转义的可能性
Requires
- php: >=5.3.0
- slim/slim: 2.*
This package is not auto-updated.
Last update: 2024-09-28 15:24:25 UTC
README
简单的,同时强大的 PHP Slim 框架中间件认证。
原理
我们尝试使此系统尽可能简单。因此,我们提供了两个部分——极其简单——的认证
- 我们负责认证过程,使用 HTTP Basic Auth,
- 你扩展此抽象类,以向其中添加你的登录/业务逻辑。
最后,你将扩展的类连接到 Slim,我们就完成了。
安装
系统使用 composer 作为主要的交付系统,使用 composer.json
{ "require": { "deisss/slim-auth": "1.*" } }
通过命令行重新编译 composer composer update
使用方法
登录逻辑可以与每个系统都不同(如无状态、基于会话、基于 Facebook),我们决定有必要提供一个系统,你可以将其逻辑添加到其中。抽象认证类是实现此目标并保持一切简单化的最佳方式。因此,由于它是抽象的,你需要创建自己的具体类
<?php namespace Slim\Extras\Middleware; use Slim\Extras\Middleware\AbstractHTTPBasicAuth as AbstractHTTPBasicAuth; /** * Our concrete authentification implementation */ class HTTPBasicAuth extends AbstractHTTPBasicAuth { /** * Constructor * * @param array $skipUrl Any revelant path to skip authentification check */ public function __construct($skipUrl = null) { $this->setSkip($skipUrl); } /** * The function to handle the database/session/facebook check * * @param string $login The login supply by user * @param string $password The password supply by user * @param string $path The url user try to access * @return Any value 'null' for php empty function will be consider * as a fail (and yet be refused), any non-empty value * will be accepted */ protected function getUserFromLogin($login, $password, $path) { // Your database/session check here // Any non-empty/false value will be consider as 'ok', we // recommand to send back full user object (as you can recover it later into route function - see below) return true; } } ?>
现在这个类已经创建(我们考虑文件名作为 HTTPBasicAuth.php
,我们可以使用它
<?php require 'vendor/autoload.php'; require 'HTTPBasicAuth.php'; $app = new \Slim\Slim(); $app->add(new \Slim\Extras\Middleware\HTTPBasicAuth(array( '/hello/:name' ))); $app->get('/hello/:name', function ($name) use ($app) { echo 'Hello '.$name; }); $app->get('/logged', function() use ($app) { $userFromAuth = $app->request()->headers('auth'); // Same $userFromAuth = $app->request()->headers('user'); }); $app->run(); ?>
这里我们展示了一个完整示例,其中我们跳过了对 /hello/:name
路径的认证(正如你所见,跳过处理与 Slim 相同的变量系统)。而对于 /logged
路径,我们从 getUserFromLogin
获取用户认证结果(因此,$userFromAuth === true
)。当然,你可以返回对象而不是布尔值,从 getUserFromLogin
获取完整用户!
此外
我们没有提供任何 ACL 系统,但根据 Slim 的行为,使用路由中间件可以相当简单(注意:我们考虑与上述相同的示例)
<?php function isAdministrator() { $app = \Slim\Slim::getInstance(); // userFromAuth is now a $_SESSION array instead of boolean value $userFromAuth = $app->request()->headers('auth'); // We test, and refuse if the role is not OK if($userFromAuth['role'] != 'administrator') { $app->status(403); $app->stop(); } } $app->get('/this-is-acl', 'isAdministrator', function() { }); ?>
正如你所见,ACL 也以快速和简单的方式处理,这仅仅是因为一个简单的事实:'全局'中间件是在'路由'中间件之前执行的,这使得我们能够在'路由'中间件中已经了解有关用户的所有信息。
许可证
简单的 MIT 许可证,希望你喜欢!