发现继承AppserverController 的控制器方法都能打印出Yii::$app->user信息;但是继承AppserverTokenController 打印出来确是null ; AppserverTokenController中的init方法中加Yii::$service->customer->loginByAccessToken()这一句后,才能正常打印出Yii::$app->user信息 这个本来就是这样子么?
不需要
打开这个class
https://github.com/fecshop/yii2_fecshop/blob/master/app/appserver/modules/AppserverTokenController.php#L57
里面执行的yii 行为
yii 行为
就是use fecshop\yii\filters\auth\QueryParamAuth;
use fecshop\yii\filters\auth\QueryParamAuth;
打开这个文件:
https://github.com/fecshop/yii2_fecshop/blob/master/yii/filters/auth/QueryParamAuth.php#L27
public function authenticate($user, $request, $response) { $identity = Yii::$service->customer->loginByAccessToken(get_class($this)); if($identity){ return $identity; }else{ $cors = Yii::$service->helper->appserver->getYiiAuthCors(); if (is_array($cors)) { foreach ($cors as $c) { header($c); } } $code = Yii::$service->helper->appserver->account_no_login_or_login_token_timeout; $result = [ 'code' => $code,'message' => 'token is time out']; Yii::$app->response->data = $result; Yii::$app->response->send(); Yii::$app->end(); } }
可以看到这里已经执行。
猜测,你可能是重写
的behaviors()方法导致了,去掉重新看一下是否恢复。
behaviors()
$behaviors['authenticator'] = [ 'class' => CompositeAuth::className(), 'authMethods' => [ # 下面是三种验证access_token方式 //HttpBasicAuth::className(), //HttpBearerAuth::className(), # 这是GET参数验证的方式 # http://10.10.10.252:600/user/index/index?access-token=xxxxxxxxxxxxxxxxxxxx QueryParamAuth::className(), ], ];