Problem/Motivation

4XX errors are not properly handled during calls to the Twitter API.

There also may be a need for some additional documentation about "elevated" access to Twitter APIs. It's unclear whether such access is necessary for this module to work. Example API error reflecting this:

You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-...

Original summary

I tried to install the module on a Drupal 9.4.5 with PHP 8.1.9 and the user was bounced to the authorize screen, I click authorize app then I am redirected back and the following shows up with debugging enabled to see what is going on.

Warning: Undefined property: stdClass::$profile_image_url_https in Drupal\social_auth_twitter\Controller\TwitterAuthController->callback() (line 227 of modules/contrib/social_auth_twitter/src/Controller/TwitterAuthController.php).
Drupal\social_auth_twitter\Controller\TwitterAuthController->callback()
call_user_func_array(Array, Array) (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 564)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 158)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 80)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 50)
Drupal\ban\BanMiddleware->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 709)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

Deprecated function: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in Drupal\social_auth_twitter\Controller\TwitterAuthController->callback() (line 227 of modules/contrib/social_auth_twitter/src/Controller/TwitterAuthController.php).
Drupal\social_auth_twitter\Controller\TwitterAuthController->callback()
call_user_func_array(Array, Array) (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 564)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 158)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 80)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 50)
Drupal\ban\BanMiddleware->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 709)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

Warning: Undefined property: stdClass::$id in Drupal\social_auth_twitter\Controller\TwitterAuthController->callback() (line 228 of modules/contrib/social_auth_twitter/src/Controller/TwitterAuthController.php).
Drupal\social_auth_twitter\Controller\TwitterAuthController->callback()
call_user_func_array(Array, Array) (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 564)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 158)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 80)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 50)
Drupal\ban\BanMiddleware->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 709)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

Warning: Undefined property: stdClass::$id in Drupal\social_auth_twitter\Controller\TwitterAuthController->callback() (line 231 of modules/contrib/social_auth_twitter/src/Controller/TwitterAuthController.php).
Drupal\social_auth_twitter\Controller\TwitterAuthController->callback()
call_user_func_array(Array, Array) (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 564)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 158)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 80)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 50)
Drupal\ban\BanMiddleware->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (Line: 709)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)

You could not be authenticated, please contact the administrator.

Suggestions?

Comments

Christopher Riley created an issue. See original summary.

Christopher Riley’s picture

I also have the following showing up in dblog

Failed to to query entity. Exception: Query condition 'social_auth.provider_user_id IN ()' cannot be empty.

Failed to create user. Name:

wells’s picture

Category: Bug report » Support request
Status: Active » Postponed (maintainer needs more info)

Huh... that is odd. This doesn't appear at first glance to be PHP 8.1 related -- I'm able to authorize fine using PHP 8.1.6. Did you have a functional setup on PHP 8.0 previously or something? The errors make it sound like the library is returning a user object from Twitter but it doesn't have any of the expected properties (even id, which is weird). I'm not sure what would lead to that.

Are you able to drop a breakpoint or just var_dump($user) after line 222 of \Drupal\social_auth_twitter\Controller\TwitterAuthController::callback? That may at least give some clue about what isn't working.

wells’s picture

Also, could you confirm you followed the configuration steps in the README/module description exactly as described? The configuration process is a little tricky.

Christopher Riley’s picture

Thank you for the tip. I added in a dump as you requested and received back a notice that I didn't have high enough access configured. It might be worth pumping that message back to dblog as it comes in as a 453 error with the following notice.

You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-...

Thanks for the assist, its greatly appreciated.

wells’s picture

Title: PHP 8.1 Issues » Handle 4XX error responses from the Twitter API
Category: Support request » Task
Issue summary: View changes
Status: Postponed (maintainer needs more info) » Active

Ok, cool. Thanks for following up. I'll use this ticket to handle 4XX errors and make sure the access levels and permissions stuff is documented.

  • wells committed 66105eb on 3.0.x
    Issue #3304852 by Christopher Riley, wells: Handle 4XX error responses...
wells’s picture

Status: Active » Fixed

Thanks, again, for flagging this. The auth controller has been updated to catch errors and information about elevated access has been added to the README.

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.