When the twitter api doesn't return any email, the \Auth\SocialAuthenticate::_touch method returns a Cake\Network\Response (it should return the user data) then the LoginTrait::_afterIdentifyUser set the AuthComponent::user with that renspose value, causing the error "Invalid data type, must be an array or \ArrayAccess instance."
The \Auth\SocialAuthenticate::_touch should always return the user data even when there is no user email, correct?
object(Cake\Network\Response) {
'status' => (int) 302,
'contentType' => 'text/html',
'headers' => [
'Location' => 'http://awesome.dev/users/users/social-email'
],
'file' => null,
'fileRange' => [],
'cookies' => [],
'cacheDirectives' => [],
'body' => null
}
2016-12-01 17:43:39 Error: [InvalidArgumentException] Invalid data type, must be an array or \ArrayAccess instance.
Request URL: /auth/twitter?oauth_token=here_was_the_original_token
Stack Trace:
#0 /www/app/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php(691): Cake\Utility\Hash::get(Object(Cake\Network\Response), 'id')
#1 /www/app/vendor/cakedc/users/src/Controller/Component/RememberMeComponent.php(105): Cake\Controller\Component\AuthComponent->user('id')
#2 /www/app/vendor/cakephp/cakephp/src/Event/EventManager.php(424): CakeDC\Users\Controller\Component\RememberMeComponent->setLoginCookie(Object(Cake\Event\Event), Object(Cake\Network\Response))
#3 /www/app/vendor/cakephp/cakephp/src/Event/EventManager.php(391): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event))
#4 /www/app/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event))
#5 /www/app/vendor/cakedc/users/src/Controller/Traits/LoginTrait.php(208): Cake\Controller\Controller->dispatchEvent('Users.Component...', Array)
#6 /www/app/vendor/cakedc/users/src/Controller/Traits/LoginTrait.php(58): CakeDC\Users\Controller\UsersController->_afterIdentifyUser(Object(Cake\Network\Response), true)
#7 [internal function]: CakeDC\Users\Controller\UsersController->twitterLogin()
#8 /www/app/vendor/cakephp/cakephp/src/Controller/Controller.php(435): call_user_func_array(Array, Array)
#9 /www/app/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(122): Cake\Controller\Controller->invokeAction()
#10 /www/app/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(96): Cake\Http\ActionDispatcher->_invoke(Object(CakeDC\Users\Controller\UsersController))
#11 /www/app/vendor/cakephp/cakephp/src/Http/BaseApplication.php(83): Cake\Http\ActionDispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#12 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Http\BaseApplication->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#13 /www/app/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(62): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#14 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#15 /www/app/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#16 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#17 /www/app/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(81): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#18 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#19 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#20 /www/app/vendor/cakephp/cakephp/src/Http/Server.php(92): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#21 /www/app/webroot/index.php(37): Cake\Http\Server->run()
#22 {main}
When the twitter api doesn't return any email, the \Auth\SocialAuthenticate::_touch method returns a Cake\Network\Response (it should return the user data) then the LoginTrait::_afterIdentifyUser set the AuthComponent::user with that renspose value, causing the error "Invalid data type, must be an array or \ArrayAccess instance."
The \Auth\SocialAuthenticate::_touch should always return the user data even when there is no user email, correct?
object(Cake\Network\Response) {
}
2016-12-01 17:43:39 Error: [InvalidArgumentException] Invalid data type, must be an array or \ArrayAccess instance.
Request URL: /auth/twitter?oauth_token=here_was_the_original_token
Stack Trace:
#0 /www/app/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php(691): Cake\Utility\Hash::get(Object(Cake\Network\Response), 'id')
#1 /www/app/vendor/cakedc/users/src/Controller/Component/RememberMeComponent.php(105): Cake\Controller\Component\AuthComponent->user('id')
#2 /www/app/vendor/cakephp/cakephp/src/Event/EventManager.php(424): CakeDC\Users\Controller\Component\RememberMeComponent->setLoginCookie(Object(Cake\Event\Event), Object(Cake\Network\Response))
#3 /www/app/vendor/cakephp/cakephp/src/Event/EventManager.php(391): Cake\Event\EventManager->_callListener(Array, Object(Cake\Event\Event))
#4 /www/app/vendor/cakephp/cakephp/src/Event/EventDispatcherTrait.php(78): Cake\Event\EventManager->dispatch(Object(Cake\Event\Event))
#5 /www/app/vendor/cakedc/users/src/Controller/Traits/LoginTrait.php(208): Cake\Controller\Controller->dispatchEvent('Users.Component...', Array)
#6 /www/app/vendor/cakedc/users/src/Controller/Traits/LoginTrait.php(58): CakeDC\Users\Controller\UsersController->_afterIdentifyUser(Object(Cake\Network\Response), true)
#7 [internal function]: CakeDC\Users\Controller\UsersController->twitterLogin()
#8 /www/app/vendor/cakephp/cakephp/src/Controller/Controller.php(435): call_user_func_array(Array, Array)
#9 /www/app/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(122): Cake\Controller\Controller->invokeAction()
#10 /www/app/vendor/cakephp/cakephp/src/Http/ActionDispatcher.php(96): Cake\Http\ActionDispatcher->_invoke(Object(CakeDC\Users\Controller\UsersController))
#11 /www/app/vendor/cakephp/cakephp/src/Http/BaseApplication.php(83): Cake\Http\ActionDispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#12 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Http\BaseApplication->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#13 /www/app/vendor/cakephp/cakephp/src/Routing/Middleware/RoutingMiddleware.php(62): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#14 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\RoutingMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#15 /www/app/vendor/cakephp/cakephp/src/Routing/Middleware/AssetMiddleware.php(88): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#16 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Routing\Middleware\AssetMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#17 /www/app/vendor/cakephp/cakephp/src/Error/Middleware/ErrorHandlerMiddleware.php(81): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#18 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(65): Cake\Error\Middleware\ErrorHandlerMiddleware->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response), Object(Cake\Http\Runner))
#19 /www/app/vendor/cakephp/cakephp/src/Http/Runner.php(51): Cake\Http\Runner->__invoke(Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#20 /www/app/vendor/cakephp/cakephp/src/Http/Server.php(92): Cake\Http\Runner->run(Object(Cake\Http\MiddlewareQueue), Object(Zend\Diactoros\ServerRequest), Object(Zend\Diactoros\Response))
#21 /www/app/webroot/index.php(37): Cake\Http\Server->run()
#22 {main}