Search code examples
javascripttwitternext.jstwitter-oauthnext-auth

POST request issues to Twitter API


I have been using NextJS, Twitter-lite to build an application using the twitter app, I basically am trying to implement the functionality in which users can post a tweet from the app to their twitter accounts. I have also used Next-Auth for implementing oAuth for twitter.

So after some working, I have managed to make it work and highlight my error - Access tokens. I want to fetch access tokens from the user after they have logged in,

In the below example - I run this script and a post is updated to my account indeed

Here is my code for the api/twitter/post.js

import Twitter from 'twitter-lite';
import { getSession } from 'next-auth/react'
import { getToken } from 'next-auth/jwt';
export default async (req, res) =>{
  
    var Twit = require('twit')
 
   
  
    const session = await getSession({ req });
    const token = await getToken({
      req,
      secret: process.env.NEXTAUTH_SECRET
    });
    console.log(token.twitter.accessToken)
  
    var T = new Twit({
        consumer_key: process.env.TWITTER_CONSUMER_KEY,
        consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
        access_token: 'process.env.TWITTER_ACCESS_TKN',
        access_token_secret: 'process.env.TWITTER_ACCESS_TKN_SCRT'
      });
      
     

      T.post('statuses/update', { status: 'hello worldj!' }, function(err, data, response) {
        console.log(data)
      })


    return res.status(200).json({ status: 'ok'});
  }

Now this does work, when I hit my api route a new tweet is posted but only to 'my' account because I provided my access_tokens, I would like to know how I can get users access tokens, I have already signed them in using NextAuth so I'm sure I'm just missing a few things.


Solution

  • So I figured this one out,

    In the call backs functions in the [...nextauth].js, I was just fetching the access_tokens with an outdated name and the new name is account.oauth_token

    For anyone who ever encounters this issue - (Trying to fetch logged in users access tokens to access restricted twitter endpoints)

    callbacks: {
        async jwt({ token, user, account = {}, profile, isNewUser }) {
          if (account.provider && !token [account.provider]) {
            token[account.provider] = {};
          }
          if(account.oauth_token) {
            token[account.provider].accessToken = account.oauth_token;
          }
          if (account.oauth_token_secret) {
            token [account.provider].refreshToken = account.oauth_token_secret;
          }
    
            return token
           
        
          },
    

    This is how you get the logged in users access_token and access_token_secret