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.' });
}
});