第一种情况, 使用 HTTP Basci Auth
use yii\helpers\ArrayHelper;
use yii\filters\auth\HttpBasicAuth;
public function behaviors()
{
$parent = parent::behaviors();
$parent['authenticator'] => [
'class' => HttpBasicAuth::className(),
/**
如果设置了这个auth,就会按照这个auth进行认证,可以查看yii\filters\auth\HttpBasicAuth源码,
如果没设置这个属性,那么就会使用access-tokend的方式实现,$username作为access-token,
使用main.php配置中的User组件类实现,而且User组件类类中必须设置loginByAccessToken()函数实现。
所以,如果使用HttpBasicAuth的话,强烈建议设置auth属性
*/
'auth' => function ($username, $password) {
return \app\models\User::findOne([
'username' => $username,
'password' => $password,
]);
}
]
}
use yii\helpers\ArrayHelper;
use yii\filters\auth\QueryParamAuth;
public function behaviors()
{
$parent = parent::behaviors();
$parent['authenticator'] => [
'class' => QueryParamAuth::className(),
// 设置token名称,默认是access-token
'tokenParam' => 'token'
]
}
public function authenticate($user, $request, $response)
{
$accessToken = $request->get($this->tokenParam);
if (is_string($accessToken)) {
$identity = $user->loginByAccessToken($accessToken, get_class($this));
if ($identity !== null) {
return $identity;
}
}
if ($accessToken !== null) {
$this->handleFailure($response);
}
return null;
}
当在一个restful的控制器中的
public function behaviors() {
}
设置了以上的认证方式,那么就会开启整个认证,也就是访问这个控制器的每一个请求的action都会进行验证,也就是全局验证。 function behaviors() {
$behaviors = parent::behaviors();
// 当前操作的id
$currentAction = Yii::$app->controller->action->id;
// 需要进行认证的action
$authActions = ['index'];
// 需要进行认证的action就要设置安全认证类
if(in_array($currentAction, $authActions)) {
$behaviors['authenticator'] = [
'class' => QueryParamAuth::className(),
];
}
return ArrayHelper::merge([
//设置可以接收访问的域和方法。
[
'class' => Cors::className(),
'cors' => [
'Origin' => ['*'],
// 'Access-Control-Request-Method' => ['GET', 'HEAD', 'OPTIONS'],
'Access-Control-Request-Headers' => ['Origin', 'X-Requested-With', 'Content-Type', 'Accept'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
],
],
], $behaviors);
}
就是按照以上的设置就可以,将你觉得需要认证的action放在$authActions的数组里即可。当请求的是这些设置需要认证的action的时候,就会返回401,代表没办法认证通过,需要认证。
友情福利:本人已开源基于swoole扩展实现的轻量级框架
https://github.com/bingcool/swoolefy