2017-07-23 16:18:31 4427次浏览 0条回答 0 悬赏 10 金钱

在做API的时候 :

UserController.php

public function behaviors()
    {

        $behaviors = parent::behaviors();

        $behaviors['authenticator'] = [
            'class' => QueryParamAuth::className(), //问题就在这里,开启就报下面的错, 把这个注释不验证就好了。 感觉是access-token的问题。
        ];

        $behaviors['contentNegotiator']['formats'] = ['application/json' => Response::FORMAT_JSON];

        return $behaviors;
    }

{
"name": "PHP Notice",
"message": "Array to string conversion",
"code": 8,
"type": "yii\base\ErrorException",
"file": "D:\phpStudy\WWW\skqianbao\vendor\yiisoft\yii2\web\User.php",
"line": 247,
"stack-trace": [

"#0 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\filters\\auth\\QueryParamAuth.php(31): yii\\web\\User->loginByAccessToken()",
"#1 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\filters\\auth\\AuthMethod.php(61): yii\\filters\\auth\\QueryParamAuth->authenticate()",
"#2 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\base\\ActionFilter.php(75): yii\\filters\\auth\\AuthMethod->beforeAction()",
"#3 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\base\\Component.php(545): yii\\base\\ActionFilter->beforeFilter()",
"#4 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\base\\Component.php(545): ::call_user_func:{D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\base\\Component.php:545}()",
"#5 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\base\\Controller.php(272): yii\\base\\Component->trigger()",
"#6 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\web\\Controller.php(164): yii\\base\\Controller->beforeAction()",
"#7 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\base\\Controller.php(154): yii\\web\\Controller->beforeAction()",
"#8 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\base\\Module.php(523): yii\\base\\Controller->runAction()",
"#9 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\web\\Application.php(102): yii\\base\\Module->runAction()",
"#10 D:\\phpStudy\\WWW\\skqianbao\\vendor\\yiisoft\\yii2\\base\\Application.php(380): yii\\web\\Application->handleRequest()",
"#11 D:\\phpStudy\\WWW\\skqianbao\\api\\web\\index.php(17): yii\\base\\Application->run()",
"#12 {main}"

]
}

补充于 2017-07-23 16:40

知道问题所在了 :

yii\web\User.php

public function login(IdentityInterface $identity, $duration = 0)
    {
        if ($this->beforeLogin($identity, false, $duration)) {
            $this->switchIdentity($identity, $duration);
            $id = $identity->getId(); //这里是 user模型去实现取得主键ID, 这里竟然返回一个数组,原因在下面: 
            $ip = Yii::$app->getRequest()->getUserIP();
            if ($this->enableSession) {
                $log = "User '$id' logged in from $ip with duration $duration.";
            } else {
                $log = "User '$id' logged in from $ip. Session not enabled.";
            }
            Yii::info($log, __METHOD__);
            $this->afterLogin($identity, false, $duration);
        }

        return !$this->getIsGuest();
    }

User模型中实现这个方法:

    public function getId()
    {
        // TODO: Implement getId() method.
        return $this->primaryKey();  //TODO:这里一定要注意了, 返回的是数组而且是字段名称,而上面需要的是字符串。
        return $this->id; //TODO:用这个就OK了。
}

终于跳出这个坑了。

    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
frans
经理

frans

注册时间:2012-07-05
最后登录:2022-11-10
在线时长:21小时34分
  • 粉丝7
  • 金钱1535
  • 威望20
  • 积分1945

热门问题