- π¬π§United Kingdom 2dareis2do
Hi Wells,
I am having a similar problem.
First of all it was not clear to me that the account has to be linked via the user account edit page but when doing so it seems to authorise ok from X but then I am getting the following error in drupal after twitter seems to have returned an access token
e.g.
Error message Warning: Attempt to read property "id" on null in Drupal\social_post_twitter\Controller\TwitterPostController->callback() (line 187 of modules/contrib/social_post_twitter/src/Controller/TwitterPostController.php). Drupal\social_post_twitter\Controller\TwitterPostController->callback() call_user_func_array(Array, Array) (Line: 123) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 592) 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: 182) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) 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: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 19) Warning: Attempt to read property "name" on null in Drupal\social_post_twitter\Controller\TwitterPostController->callback() (line 188 of modules/contrib/social_post_twitter/src/Controller/TwitterPostController.php). Drupal\social_post_twitter\Controller\TwitterPostController->callback() call_user_func_array(Array, Array) (Line: 123) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 592) 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: 182) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) 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: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 19) Warning: Attempt to read property "id" on null in Drupal\social_post_twitter\Controller\TwitterPostController->callback() (line 188 of modules/contrib/social_post_twitter/src/Controller/TwitterPostController.php). Drupal\social_post_twitter\Controller\TwitterPostController->callback() call_user_func_array(Array, Array) (Line: 123) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 592) 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: 182) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) 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: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 19) Warning: Attempt to read property "url" on null in Drupal\social_post_twitter\Controller\TwitterPostController->callback() (line 188 of modules/contrib/social_post_twitter/src/Controller/TwitterPostController.php). Drupal\social_post_twitter\Controller\TwitterPostController->callback() call_user_func_array(Array, Array) (Line: 123) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 592) 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: 182) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) 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: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 19) You could not be authenticated, please contact the administrator.
and
Type social_post_twitter Date Friday, October 20, 2023 - 18:27 User daniel Location https://streathamlifed8.ddev.site/user/social-post/twitter/auth/callback?oauth_token=KDX8vgAAAAABqj9nAAABi05X79s&oauth_verifier=oOm5OkD5L4nFeByRLCgSr5JOP6xjcPRK Referrer https://api.twitter.com/ Message Failed to to query entity. Exception: Query condition 'social_post.provider_user_id IN ()' cannot be empty. Severity Error Hostname 192.168.160.10
and
social_post Date Friday, October 20, 2023 - 18:27 User daniel Location https://streathamlifed8.ddev.site/user/social-post/twitter/auth/callback?oauth_token=KDX8vgAAAAABqj9nAAABi05X79s&oauth_verifier=oOm5OkD5L4nFeByRLCgSr5JOP6xjcPRK Referrer https://api.twitter.com/ Message Drupal\Core\Database\IntegrityConstraintViolationException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'provider_user_id' cannot be null: INSERT INTO "social_post" ("uuid", "user_id", "plugin_id", "provider_user_id", "name", "token", "additional_data", "link__uri", "link__title", "link__options") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9); Array ( [:db_insert_placeholder_0] => 1f29d6b9-4876-4b99-8a7d-42fa1cc2d1f3 [:db_insert_placeholder_1] => 1 [:db_insert_placeholder_2] => social_post_twitter [:db_insert_placeholder_3] => [:db_insert_placeholder_4] => [:db_insert_placeholder_5] => endtMnVDUDlhR1JNWnB3Z3R3MkhVQjFzZDR0TDJqVkYrc2wrRVloc3A3bDUzWXJoWmdYVEdFY3YxYzY0dW5IWW1XVk45Zittb2x5QUhVZC9UdkNYK2tnQjc3Tmo2MVRrVUs0MHFzUHlXVG5pVVRyWGdzdDBUMGduQWRRZjZqWWFWVFNYVjBRa1hEOVRGdzBMTEpnYkdZYzBuaWpnRTBxTTlVMk14a0dGdWRicUVmd1J2eHVVdjJHNjh1Sy94b09yN2tXTjErWFIzTktvSXdzcFAxbER0aXN4UTU2WTIwZVhwUnk5ZkhtZDJ5VDhic0ZKSFpDQmp1NjRFait3MWJXTjo6EzVzjZnSVn9UpONhrPqglg== [:db_insert_placeholder_6] => [:db_insert_placeholder_7] => [:db_insert_placeholder_8] => [:db_insert_placeholder_9] => N; ) in Drupal\mysql\Driver\Database\mysql\ExceptionHandler->handleExecutionException() (line 43 of /var/www/html/web/core/modules/mysql/src/Driver/Database/mysql/ExceptionHandler.php). Severity Error Hostname 192.168.160.10 Operations
and
social_post_twitter Date Friday, October 20, 2023 - 18:27 User daniel Location https://streathamlifed8.ddev.site/user/social-post/twitter/auth/callback?oauth_token=KDX8vgAAAAABqj9nAAABi05X79s&oauth_verifier=oOm5OkD5L4nFeByRLCgSr5JOP6xjcPRK Referrer https://api.twitter.com/ Message Failed to add user record in Social Auth entity. Exception: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'provider_user_id' cannot be null: INSERT INTO "social_post" ("uuid", "user_id", "plugin_id", "provider_user_id", "name", "token", "additional_data", "link__uri", "link__title", "link__options") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9); Array ( [:db_insert_placeholder_0] => 1f29d6b9-4876-4b99-8a7d-42fa1cc2d1f3 [:db_insert_placeholder_1] => 1 [:db_insert_placeholder_2] => social_post_twitter [:db_insert_placeholder_3] => [:db_insert_placeholder_4] => [:db_insert_placeholder_5] => endtMnVDUDlhR1JNWnB3Z3R3MkhVQjFzZDR0TDJqVkYrc2wrRVloc3A3bDUzWXJoWmdYVEdFY3YxYzY0dW5IWW1XVk45Zittb2x5QUhVZC9UdkNYK2tnQjc3Tmo2MVRrVUs0MHFzUHlXVG5pVVRyWGdzdDBUMGduQWRRZjZqWWFWVFNYVjBRa1hEOVRGdzBMTEpnYkdZYzBuaWpnRTBxTTlVMk14a0dGdWRicUVmd1J2eHVVdjJHNjh1Sy94b09yN2tXTjErWFIzTktvSXdzcFAxbER0aXN4UTU2WTIwZVhwUnk5ZkhtZDJ5VDhic0ZKSFpDQmp1NjRFait3MWJXTjo6EzVzjZnSVn9UpONhrPqglg== [:db_insert_placeholder_6] => [:db_insert_placeholder_7] => [:db_insert_placeholder_8] => [:db_insert_placeholder_9] => N; ) Severity Error Hostname 192.168.160.10 Operations
atm I have managed to post tweets with Oauth 1.0 via postman my dev account. I could not figure out how to do this with openauth 2 as was getting a timeout when trying.
Are you saying that you cannot post tweets with Oauth 2 but you can with v1?
- πΊπΈUnited States wells Seattle, WA
Are you saying that you cannot post tweets with Oauth 2 but you can with v1?
I believe that to be the case. Yes. Even with the latest version of Social Auth Twitter (where things are more up to date) the v2 API is not supported.
- π¬π§United Kingdom 2dareis2do
Thanks for the quick response.
The info on authentication endpoints is here
https://developer.twitter.com/en/docs/authentication/guides/v2-authentic...
Info on packages is here
https://developer.twitter.com/en/docs/twitter-api and
https://developer.twitter.com/en/docs/twitter-api/getting-started/about-...You may be right, but I not see anywhere where it talks about open Auth 2 being restricted by tier.
- π¬π§United Kingdom 2dareis2do
Thanks for the tip about https://www.drupal.org/project/social_auth_twitter β . Will check that out.
This is misleading afaict
Ensure the app has Elevated Access.
That should not be necessary as my tests with postman seem to prove.
- π¬π§United Kingdom 2dareis2do
Ok I have had a quick look at social_auth_twitter and I am not sure it does what I am looking for.
I also do like the way this module uses the Rules module.
This module basically uses abraham/twitteroauth library. To post a new tweet with I can achieve what I want using the following code, even with a basic tier account:
<?php require "vendor/autoload.php"; use Abraham\TwitterOAuth\TwitterOAuth; $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret); $content = $connection->get("account/verify_credentials"); // $connection = new TwitterOAuth($ck, $cs, $ot, $os); $data = [ 'text' => 'Hello world local 1' ]; $connection->setApiVersion('2'); $content = $connection->post("tweets", $data, true); echo json_encode($content);
From what I can see this module currently requires a user to manually login to twitter in order to post etc. I don't really want or need that behaviour.
What I think I want is to pass access_token and secret. This should be sufficient. I do not want the ability for each user to login. Not really sure why anyone would want that feature?
Not sure if it can be accomplished here or perhaps I could fork this to achieve what i want, i.e. to post new articles to twitter with a basic tier X account.
- πΊπΈUnited States wells Seattle, WA
I didn't mean to imply Social Auth Twitter could be an alternative -- was just pointing out that module is more up-to-date but still only supports the older Twitter API.
This module should be able to work with a similar process but may or may not need code changes as well.
I'm happy to review a patch if anyone is able to get things working but I'm not a Twitter user myself so this isn't something I've been able to dig in to.
- π¬π§United Kingdom 2dareis2do
Thanks again Wells,
Just trying to undertand the situation with this module. I think you are saying that it does still work if you have an account with a tier higher than the basic one.
Perhaps someone who uses X and this module can verify this?
I would be happy to provide a patch to fix if using a basic tier but my concern here is that any fix could also break things if you have a higher tier subscription.
Thinking about this further my feeling is my requirements are a little different. From what I can tell this module allows multiple Drupal users to log in to a single Drupal instance and link their respective X accounts, allowing them to post new tweets from a single Drupal instance linked to their unique twitter/x handle.
My requirement is for a single Drupal user (admin) to link their X account and to post content streams under a single linked X account. At the time of writing up to 1500 posts can be generated on a basic account tier.
- π¬π§United Kingdom 2dareis2do
Ok I have created https://www.drupal.org/project/social_post_x β .
Works a bit differently but to this module but does support a basic tier account.
One thing I notice is that you I think you need to have an email address associated with your account before being able to post tweets.
- π¬π§United Kingdom 2dareis2do
Ok I have now had a chance to look at this issue and from what I can tell this is the failing code:
// This fails!!! $request_token = $client->oauth('oauth/request_token', ['oauth_callback' => $network_plugin->getOauthCallback()]);
in Abraham/TwitterOAuth
we have
$result = $this->oAuthRequest($url, 'POST', $parameters); if ($this->getLastHttpCode() != 200) { throw new TwitterOAuthException($result); }
This returns 401 unauthorised. From what I can tell in order to get the oauth2 token, request also needs to pass additional info such as either client id/secret or bearer token.
To get post access with openAuth2 requires OAuth 2.0 Authorization Code Flow with PKCE.
https://developer.twitter.com/en/docs/authentication/oauth-2-0
From what I can tell this requires user to pass some additional data such as client_id and client_secret but I am not absolutely sure on this.
For my purposes though using OpenAuth 1 seems to be sufficient as I do not need to enable individual users to post from my site.
Interestingly, in order to configure OpenAuth access an Callback still needs to be added to the X developer panel at the time of writing, even though this is not required afaict for OAuth 1.