Communication with twitter in oauth1 user context on my backend express

25 views Asked by At

i create a aplication where the user connect to my app with twitter i use passport-twitter for that it use oauth1 for connect.

With that i get the token and tokensecret of the user.

I have create also a app on twitter dev portal who can just read the data.

Now i try to connect to the api with twitter-api-v2

In user mode like that i can do my request with he authoristion the user give me when he connect.

Impossible to connect to the api in user context mode.

This is my code i have created a function initTwitterClient() who tells me if i am connect or not to the client twitter.

require('dotenv').config();
const {TwitterApi} = require('twitter-api-v2');
const axios = require('axios');

function initTwitterClient(twitterToken, twitterTokenSecret) {
  console.log('initTwitterClient', twitterToken, twitterTokenSecret);
  const client = new TwitterApi({
    consumer_key: process.env.CONSUMER_TWITTER_KEY,
    consumer_secret: process.env.CONSUMER_TWITTER_KEY_SECRET,
    access_token_key: twitterToken, // Utilisez le token Twitter reçu depuis Next.js
    access_token_secret: twitterTokenSecret, // Utilisez le token secret Twitter reçu depuis Next.js
  });

  return client;
}


async function checkTwitterConnection(twitterToken, twitterTokenSecret) {
  const client = initTwitterClient(twitterToken, twitterTokenSecret);
  try {
    // Utilisez l'API Twitter v2 pour récupérer les informations de l'utilisateur actuellement authentifié
    const response = await client.get('/2/account');

    // Si la réponse contient des données d'utilisateur, cela signifie que la connexion Twitter est réussie
    if (response.data && response.data.data) {
      const userData = response.data.data;
      console.log('Utilisateur connecté:', userData.username);
      return true;
    } else {
      console.error('Échec de la récupération des informations de l\'utilisateur.');
      return false;
    }
  } catch (error) {
    console.error('Erreur lors de la vérification de la connexion Twitter:', error);
    return false;
  }
}

I callmy function in a url of my frontend all the data are really good transmit all the value of the token are good

Here this the code when i call my test function

require('dotenv').config();
const express = require('express');
const jwt = require('jsonwebtoken');
const {
  initTwitterClient,
  checkTwitterConnection,
  checkLike,
  checkComment,
  checkFollow,
  checkRetweet,
} = require('../../services/twitter/index'); 

router.post('/x/verification/', async (req, res) => {

    try {
      const twitterTokenDecoded = jwt.verify(req.body.twitterToken, process.env.JWT_TWITTER_CLIENT_TOKEN);
      const twitterTokenSecretDecoded = jwt.verify(req.body.twitterTokenSecret, process.env.JWT_TWITTER_CLIENT_TOKEN_SECRET);
      const twitterToken = twitterTokenDecoded.token;
      const twitterTokenSecret = twitterTokenSecretDecoded.tokenSecret;
      const questId = req.body.questId;
      const tweetId = req.body.tweetId;
      const twitterScreenName = req.body.twitterScreenName;
      const questTask = req.body.questTask;
      const questUserName = req.body.questUsername;
      const questNbrUserName = parseInt(req.body.questNbrUsernameString, 10);
      //console.log('questNbrUserNameString', req.body.questNbrUsernameString);
      //console.log('questUserName', req.body.questUsername);
      //console.log('verifReq', tweetId, twitterScreenName, questTask, questUserName, questNbrUserName);
      console.log('Données reçues du client :', req.body);
      console.log('Data received on the server:');
      console.log('twitterScreenName:', twitterScreenName);
      console.log('twitterToken:', twitterToken);
      console.log('twitterTokenSecret:', twitterTokenSecret);
      console.log('questId:', questId);
      console.log('tweetId:', tweetId);
      console.log('questTask:', questTask);
      console.log('questUsername:', questUserName);
      console.log('questNbrUsernameString:', questNbrUserName);
      /* retour des function*/
      //const retweetResult = await checkRetweet(tweetId, twitterToken, twitterTokenSecret, twitterScreenName);
     // const followResult = await checkFollow(questUserName, twitterToken, twitterTokenSecret, twitterScreenName);
      //const likeResult = await checkLike(tweetId,twitterToken, twitterTokenSecret,twitterScreenName);
     // const commentResult = await checkComment(tweetId,twitterToken, twitterTokenSecret,twitterScreenName);

      async function verifierConnexionTwitter() {
        const estConnecte = await checkTwitterConnection(twitterToken, twitterTokenSecret);
        console.log(estConnecte);
        if (estConnecte) {
          // L'utilisateur est connecté avec succès à Twitter
          // Vous pouvez effectuer d'autres opérations ici
          console.log('L\'utilisateur est connecté à Twitter.');
        } else {
          // La connexion à Twitter a échoué
          console.log('La connexion à Twitter a échoué.');
        }
      }
      
      // Appelez la fonction de vérification de la connexion Twitter
      verifierConnexionTwitter();
    }
    catch (error) {
      console.error('Erreur interne du serveur :', error);
      res.status(500).json({ error: 'Une erreur interne du serveur s\'est produite.' });
  }
});
0

There are 0 answers