每个页面上的 yii2 oauth 令牌验证
yii2 oauth token validation on every page
因此我需要在除 site/login
、site/logout
、site/error
、site/auth
之外的每个页面上验证 oauth 令牌。在高级模板的基础上,这显然是在后端。
在 Yii2 中执行此操作的正确方法是什么?
- 从某种基本控制器扩展所有控制器?
- 在配置中引导 class?
- 自定义过滤器?
- 行为?
基本上我只需要在除上述 4 以外的每个页面上 运行 的函数。
Yii 2.0 已经有 3 种身份验证方法实现为过滤器:
加yii\filters\auth\CompositeAuth可同时使用多个。它们通常附加到行为中的每个控制器:
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
HttpBasicAuth::className(),
HttpBearerAuth::className(),
QueryParamAuth::className(),
],
];
return $behaviors;
}
并且它们都有一个 $except
和 $only
属性来选择您要应用它们的操作。所以你的 SiteController
中可能有这样的东西:
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => HttpBearerAuth::className(),
'except' => ['login','logout','error','auth']
];
return $behaviors;
}
您可能有相同的行为,但在所有其他控制器中没有 except
属性。或者您可以让所有其他控制器扩展一个通用控制器,在该控制器中实现验证器行为。
这些过滤器将使用内置的 User class(在您的配置文件中设置)实现 IdentityInterface to authenticate a user. That interface has already a findIdentityByAccessToken() method that you can use to validate a token instead of using findIdentity() 来注册登录用户并使其在 Yii::$app->user->identity
或 Yii::$app->user->id
.
内可访问
我想在这里解释的是关于如何在内置 Yii RESTful API framework 中实现身份验证的总结,在这里可能会更好地解释:
http://www.yiiframework.com/doc-2.0/guide-rest-authentication.html
我认为这是一个很好的例子。还有 this tutorial 描述了访问令牌的身份验证以及它如何在 User class 中实现。它是关于 REST 的,但非 REST 应用程序的技术也应该相同,因为两者都使用 User class.
因此我需要在除 site/login
、site/logout
、site/error
、site/auth
之外的每个页面上验证 oauth 令牌。在高级模板的基础上,这显然是在后端。
在 Yii2 中执行此操作的正确方法是什么?
- 从某种基本控制器扩展所有控制器?
- 在配置中引导 class?
- 自定义过滤器?
- 行为?
基本上我只需要在除上述 4 以外的每个页面上 运行 的函数。
Yii 2.0 已经有 3 种身份验证方法实现为过滤器:
加yii\filters\auth\CompositeAuth可同时使用多个。它们通常附加到行为中的每个控制器:
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
HttpBasicAuth::className(),
HttpBearerAuth::className(),
QueryParamAuth::className(),
],
];
return $behaviors;
}
并且它们都有一个 $except
和 $only
属性来选择您要应用它们的操作。所以你的 SiteController
中可能有这样的东西:
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => HttpBearerAuth::className(),
'except' => ['login','logout','error','auth']
];
return $behaviors;
}
您可能有相同的行为,但在所有其他控制器中没有 except
属性。或者您可以让所有其他控制器扩展一个通用控制器,在该控制器中实现验证器行为。
这些过滤器将使用内置的 User class(在您的配置文件中设置)实现 IdentityInterface to authenticate a user. That interface has already a findIdentityByAccessToken() method that you can use to validate a token instead of using findIdentity() 来注册登录用户并使其在 Yii::$app->user->identity
或 Yii::$app->user->id
.
我想在这里解释的是关于如何在内置 Yii RESTful API framework 中实现身份验证的总结,在这里可能会更好地解释:
http://www.yiiframework.com/doc-2.0/guide-rest-authentication.html
我认为这是一个很好的例子。还有 this tutorial 描述了访问令牌的身份验证以及它如何在 User class 中实现。它是关于 REST 的,但非 REST 应用程序的技术也应该相同,因为两者都使用 User class.