I followed the following guides:
- https://github.com/alkihis/twitter-api-v2-user-oauth2-flow-example/blob/main/src/routes/callback.ts
- https://developer.twitter.com/en/docs/authentication/oauth-2-0/user-access-token
- https://github.com/PLhery/node-twitter-api-v2/blob/master/doc/auth.md
My code
Client.ts
import { TwitterApi } from "twitter-api-v2";
import { TWITTER_API_CLIENT_ID, TWITTER_API_CLIENT_SECRET } from "./constants";
export const client = new TwitterApi({
clientId: TWITTER_API_CLIENT_ID,
clientSecret: TWITTER_API_CLIENT_SECRET,
});
This is how I generate the auth link
const { url, codeVerifier } = twitterClient.generateOAuth2AuthLink(
TWITTER_API_REDIRECT_URL,
{
scope: [
"tweet.read",
"tweet.write",
"users.read",
"offline.access",
"follows.read",
],```
}
);
await UserAPI.create({
userId,
codeVerifier,
status: UserAPIStatus.PENDING,
}).save();
After I click through the link generated and authorise. I get the auth code from the URL
const router = useRouter();
const authCode = router.query.code as string | undefined;
useEffect(() => {
if (me?.hasTwitterAccess) return;
const fetch = async (authCode: string) => {
await validateTwitterApiAccess({
options: {
authCode,
},
});
};
// TODO: fix in backend then dpeloy
if (authCode) fetch(authCode);
}, [fetching, authCode]);
I then verify the code.
const userAPI = await UserAPI.findOne({
userId,
type: UserAPIType.TWITTER,
});
twitterClient.loginWithOAuth2({
code: authCode,
codeVerifier: userAPI.codeVerifier,
redirectUri: TWITTER_API_REDIRECT_URL,
})
But I get the following error
{
error: 'invalid_request',
error_description: 'Value passed for the authorization code was invalid.',
errors: [ { code: 131, message: 'invalid_request' } ]
}
How do I resolve this? Can you spot if I'm doing something wrong?