yidas / yii2-access-router
Yii 2 用户认证与授权路由器
Requires
- php: >=5.4.0
- yiisoft/yii2: ~2.0.0
This package is auto-updated.
Last update: 2024-08-29 04:43:12 UTC
README
Yii 2 Access Router
Yii 2 用户认证与授权路由器
特性
-
Yii 2 路由级别的用户认证/授权集成
-
通过访问令牌支持的RESTful API认证
-
通过访问令牌支持的HTTP请求登录
Access Router是一个简单的用户访问过滤器,支持在路由级别进行认证和授权。与Yii2 Access Control Filter (ACF)不同,此用户授权可以指定路由,而不仅仅是控制器-操作级别。
概要
要求
此库需要以下内容
- PHP 5.4.0+
- Yii 2.0.0+
安装
在您的Yii2项目中通过Composer安装
composer require yidas/yii2-access-router
配置
设置一个Access Router组件,然后将其添加到您的应用程序配置的bootstrap中
return [ 'bootstrap' => ['log', 'access'], 'components' => [ 'access' => [ 'class' => 'yidas\filters\AccessRouter', 'except' => ['site/login', 'site/register'], 'denyCallback' => function() { return Yii::$app->response->redirect(['/site/login']); }, ], // ... ], // ... ];
-
创建一个名为
access
的组件,该组件使用yidas\filters\AccessRouter
作为类并带有配置。 -
将此
access
组件添加到bootstrap
列表中。
选项
使用方法
除外
Access Router实现了对必须登录的用户才能通过除指定路由外的任何路由的访问控制过滤器(ACF)。
您可以设置除外的路由以跳过用户授权。带有[*]
值的except
设置表示禁用用户授权
'access' => [ 'class' => 'yidas\filters\AccessRouter', 'except' => ['site/login'], //`site/login` is the login page which can not bypass user authorization ],
HTTP认证
Access Router支持通过HTTP身份验证和带令牌的HTTP GET/POST参数自动认证客户端请求,您可以通过设置httpAuth
配置来启用它
'access' => [ 'class' => 'yidas\filters\AccessRouter', 'except' => ['site/login', 'site/register'], 'httpAuth' => [ 'enable' => true, 'denyCallback' => function() { $response = Yii::$app->response; $response->statusCode = 401; $response->format = \yii\web\Response::FORMAT_JSON; $response->data = ['message' => 'Access Denied']; return $response->send(); }, ], ],
HTTP认证登录将禁用一次性的会话访问,相当于
\Yii::$app->user->enableSession = false;
选项
请求方法登录
Access Router还支持通过提供访问令牌自动登录客户端请求,您可以通过设置httpLogin
配置来启用它
'access' => [ 'class' => 'yidas\filters\AccessRouter', 'except' => ['site/login', 'site/register'], 'httpLogin' => [ 'enable' => true, 'method' => 'post' 'only' => ['site/login'], // 'key' => 'access_token', ], ],
对于上述配置,您可以通过访问路由site/login
并带有正确的access_token
体值(Content-Type: application/x-www-form-urlencoded)进行登录。
请求方法登录与表单登录相同,会话是启用的,持续时间可以自定义。
对于GET
方法,如果您设置'method' => 'get'
和'only' => ['*']
,则可以通过任何路由使用正确的access_token
参数进行登录。例如://example.com/?access_token={有效的用户访问令牌}
出于安全原因,不建议使用在参数中传递访问令牌的
GET
方法。
选项
没有CSRF的POST方法
如果您使用post
方法并希望禁用全局CSRF验证,您可以将request
配置中的enableCsrfValidation
设置为false
'components' => [ 'request' => [ 'csrfParam' => '_csrf-backend', 'enableCsrfValidation' => false, ],
如果您只想禁用某些控制器/操作的CSRF,可以动态地为控制器设置
enableCsrfValidation
附加
全局ACF
如果您想使用原始的 Yii 2 访问控制过滤器(ACF)用于全局路由,而不是使用访问路由器的用户授权,只需取消注释访问路由器的 except
,并将 ACF 规则添加到配置中的 'as beforeRequest'。
'bootstrap' => ['log', 'access'], 'components' => [ 'access' => [ 'class' => 'yidas\filters\AccessRouter', 'except' => ['*'], // Equal to comment out ], // ... ], 'as beforeRequest' => [ 'class' => 'yii\filters\AccessControl', 'rules' => [ [ 'allow' => true, 'actions' => ['login'], ], [ 'allow' => true, 'roles' => ['@'], ], ], 'denyCallback' => function () { return Yii::$app->response->redirect(['site/login']); }, ],
注意:ACF 只能定义 actions
,而不能定义路由,这些操作可以被每个控制器应用。
对于上述设置示例,login
排除的操作可以被任何控制器匹配,例如 site/login
、controller/login
。