windhoney
- windhoney 赞了回复
拉不出屎,怪地球没有吸引力。
测试的时候报这个错误,有解答的吗
`{"name": "PHP Recoverable Error", "message": "Argument 1 passed to OAuth2\\Server::handleTokenRequest() must be an instance of OAuth2\\RequestInterface, instance of yii\\web\\Request given, called in C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\filsh\\yii2-oauth2-server\\Server.php on line 39 and defined", "code": 4096, "type": "yii\\base\\ErrorException", "file": "C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\bshaffer\\oauth2-server-php\\src\\OAuth2\\Server.php", "line": 316, "stack-trace": [ "#0 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\bshaffer\\oauth2-server-php\\src\\OAuth2\\Server.php(316): yii\\base\\ErrorHandler->handleError(4096, 'Argument 1 pass...', 'C:\\\\phpStudy\\\\PHP...', 316, Array)", "#1 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\filsh\\yii2-oauth2-server\\Server.php(39): OAuth2\\Server->handleTokenRequest(Object(yii\\web\\Request), NULL)", "#2 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\filsh\\yii2-oauth2-server\\controllers\\RestController.php(25): filsh\\yii2\\oauth2server\\Server->handleTokenRequest()", "#3 [internal function]: filsh\\yii2\\oauth2server\\controllers\\RestController->actionToken()", "#4 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\yiisoft\\yii2\\base\\InlineAction.php(57): call_user_func_array(Array, Array)", "#5 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\yiisoft\\yii2\\base\\Controller.php(157): yii\\base\\InlineAction->runWithParams(Array)", "#6 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\yiisoft\\yii2\\base\\Module.php(528): yii\\base\\Controller->runAction('token', Array)", "#7 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\yiisoft\\yii2\\web\\Application.php(103): yii\\base\\Module->runAction('oauth2/rest/tok...', Array)", "#8 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\vendor\\yiisoft\\yii2\\base\\Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))", "#9 C:\\phpStudy\\PHPTutorial\\WWW\\oauthtest\\api\\web\\index.php(17): yii\\base\\Application->run()", "#10 {main}" ]
}`
@wjj891201 yii2 --2.0.13以后getRequest()逻辑有修改导致
配置文件中
{'storageMap' => ['user_credentials' => 'backend\models\User',]}
我把改成common\models\User(我这有这个文件)继承了UserCredentialsInterface并实现了checkUserCredentials和getUserDetails方法:class User extends ActiveRecord implements IdentityInterface,UserCredentialsInterface { const STATUS_DELETED = 0; const STATUS_ACTIVE = 10; ... public function checkUserCredentials($username, $password) { $user = static::findByUsername($username); if(!$user){ return false; } return $this->validatePassword($password); } public function getUserDetails($username) { $user = static::findByUsername($username); return ['user_id' => $user->getId()]; } }
但还是提示错误:
{ "name": "Exception", "message": "Argument 1 passed to OAuth2\\Server::verifyResourceRequest() must be an instance of OAuth2\\RequestInterface, instance of yii\\web\\Request given, called in D:\\phpStudy\\WWW\\advanced\\vendor\\filsh\\yii2-oauth2-server\\Server.php on line 31", "code": 0, "type": "TypeError", "file": "D:\\phpStudy\\WWW\\advanced\\vendor\\bshaffer\\oauth2-server-php\\src\\OAuth2\\Server.php", "line": 423, "stack-trace": [ "#0 D:\\phpStudy\\WWW\\advanced\\vendor\\filsh\\yii2-oauth2-server\\Server.php(31): OAuth2\\Server->verifyResourceRequest(Object(yii\\web\\Request), NULL, NULL)", "#1 D:\\phpStudy\\WWW\\advanced\\vendor\\filsh\\yii2-oauth2-server\\filters\\auth\\CompositeAuth.php(15): filsh\\yii2\\oauth2server\\Server->verifyResourceRequest()", "#2 D:\\phpStudy\\WWW\\advanced\\vendor\\yiisoft\\yii2\\base\\ActionFilter.php(77): filsh\\yii2\\oauth2server\\filters\\auth\\CompositeAuth->beforeAction(Object(yii\\base\\InlineAction))", "#3 [internal function]: yii\\base\\ActionFilter->beforeFilter(Object(yii\\base\\ActionEvent))", "#4 D:\\phpStudy\\WWW\\advanced\\vendor\\yiisoft\\yii2\\base\\Component.php(627): call_user_func(Array, Object(yii\\base\\ActionEvent))", "#5 D:\\phpStudy\\WWW\\advanced\\vendor\\yiisoft\\yii2\\base\\Controller.php(274): yii\\base\\Component->trigger('beforeAction', Object(yii\\base\\ActionEvent))", "#6 D:\\phpStudy\\WWW\\advanced\\vendor\\yiisoft\\yii2\\web\\Controller.php(164): yii\\base\\Controller->beforeAction(Object(yii\\base\\InlineAction))", "#7 D:\\phpStudy\\WWW\\advanced\\vendor\\yiisoft\\yii2\\base\\Controller.php(155): yii\\web\\Controller->beforeAction(Object(yii\\base\\InlineAction))", "#8 D:\\phpStudy\\WWW\\advanced\\vendor\\yiisoft\\yii2\\base\\Module.php(528): yii\\base\\Controller->runAction('user-menu', Array)", "#9 D:\\phpStudy\\WWW\\advanced\\vendor\\yiisoft\\yii2\\web\\Application.php(103): yii\\base\\Module->runAction('rbac/menu/user-...', Array)", "#10 D:\\phpStudy\\WWW\\advanced\\vendor\\yiisoft\\yii2\\base\\Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))", "#11 D:\\phpStudy\\WWW\\advanced\\api\\web\\index.php(18): yii\\base\\Application->run()", "#12 {main}" ] }
这个怎么解决啊?
yii2 -2.0.13版本以后getRequest() 有些变化
oauth2 模块下可以增加一行设置“components”'oauth2' => [ 'class' => 'filsh\yii2\oauth2server\Module', 'tokenParamName' => 'access_token', 'tokenAccessLifetime' => 3600 * 24, 'storageMap' => [ 'user_credentials' => 'app\models\User', ], 'grantTypes' => [ 'user_credentials' => [ 'class' => 'OAuth2\GrantType\UserCredentials', ], 'client_credentials' => [ 'class' => 'OAuth2\GrantType\ClientCredentials', ], 'refresh_token' => [ 'class' => 'OAuth2\GrantType\RefreshToken', 'always_issue_new_refresh_token' => true ], 'authorization_code' => [ 'class' => 'OAuth2\GrantType\AuthorizationCode' ], ], 'components' => [ 'request' => function () { return \filsh\yii2\oauth2server\Request::createFromGlobals(); }, 'response' => [ 'class' => \filsh\yii2\oauth2server\Response::class, ], ], ]
遇到同样的错误,有人解决了吗yii2 -2.0.13版本以后getRequest() 有些变化
oauth2 模块下可以增加一行设置“components”'oauth2' => [ 'class' => 'filsh\yii2\oauth2server\Module', 'tokenParamName' => 'access_token', 'tokenAccessLifetime' => 3600 * 24, 'storageMap' => [ 'user_credentials' => 'app\models\User', ], 'grantTypes' => [ 'user_credentials' => [ 'class' => 'OAuth2\GrantType\UserCredentials', ], 'client_credentials' => [ 'class' => 'OAuth2\GrantType\ClientCredentials', ], 'refresh_token' => [ 'class' => 'OAuth2\GrantType\RefreshToken', 'always_issue_new_refresh_token' => true ], 'authorization_code' => [ 'class' => 'OAuth2\GrantType\AuthorizationCode' ], ], 'components' => [ 'request' => function () { return \filsh\yii2\oauth2server\Request::createFromGlobals(); }, 'response' => [ 'class' => \filsh\yii2\oauth2server\Response::class, ], ], ]
文档中漏掉了
新增一个字段
auth_item 表添加一个字段 parent_name varchar(30) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '父级名称',- windhoney 赞了回复
`'urlManager' => [
'class' => 'yii\web\UrlManager', 'enablePrettyUrl' => true, 'enableStrictParsing' => true, 'showScriptName' => false, 'rules' => [ [ 'class' => 'yii\rest\UrlRule', 'controller' => 'news', 'pluralize' => false, ], ], ]`
'pluralize' => false代表去掉restful中默认使用的复数形式(s);