美文网首页
YII RESTful api 授权认证

YII RESTful api 授权认证

作者: 胡乱唱歌ing | 来源:发表于2019-06-13 16:55 被阅读0次

配置

'components' => [
    'user' => [
         'identityClass' => 'app\models\User',
         'enableSession'=>false, #禁用session保存登录信息
         'loginUrl'=>null #显示一个HTTP 403 错误而不是跳转到登录界面
     ],
]

User model 实现方法

public static function findIdentityByAccessToken($token, $type = null)
{
      //这个可以做个缓存
     return static::findOne(['access_token' => $token,'status' => self::STATUS_ACTIVE]);
}

RESTful api控制器

public function behaviors() {
       return ArrayHelper::merge (parent::behaviors(), [ 
                'authenticator' => [ 
                    'class' => HttpBearerAuth::className() 
                ] 
       ] );
}
image.png
image.png

如果控制器里面有些方法不需要进行认证呢

我网上找了很多资料都没找到解决方案,好像只要在behaviors开启了认证之后,控制器里面的所有方法都必须认证才能访问的,但是如果有些特殊要求,某个方法不需要认证就可以获取数据,这样的话,我想到的是重写beforeAction来实现

class DefaultController extends ActiveController
{
     public $authMenu = ["yan"];  //需要认证的方法名
  #注释
     // public function behaviors() {
    //     return ArrayHelper::merge (parent::behaviors(), [ 
    //             'authenticator' => [ 
    //                 'class' => HttpBearerAuth::className() ,
    //             ],
    //     ] );
    // }
   //在beforeAction处理认证
    public function beforeAction($action)
    {
        if(in_array($action->id,$this->authMenu))
        {
            //需要验证才能通过的方法
            $user = Yii::$app->user;
            $auth = new HttpBearerAuth();
            $request = Yii::$app->request;
            $response = Yii::$app->response;
            if(!$auth->authenticate($user,$request, $response))
            {
                $auth->handleFailure($response);
                return false;
            }

        }
        return parent::beforeAction($action);
    }

   public function actionTest()
   {

        echo "test1,不需要验证";
        
    }

    public function actionYan()
    {

        echo "yan,需要验证";
        
    }
}

相关文章

网友评论

      本文标题:YII RESTful api 授权认证

      本文链接:https://www.haomeiwen.com/subject/chnsfctx.html