Stackoverflowにも同様の投稿を行ったのですが、上手く解決しないためこちらでも質問させて頂きます。
Web上でTwitter認証を行い、許可したユーザのアクセストークンを取得し、自動で何らかの操作を行うアプリケーションを制作したいです。
調べた所、↓の記事のようにOAuth1.0のアクセストークンを取得するためには中間サーバを構築が必要であることがわかったので、Firebase for CloudFunctionsを用いてこの中間サーバを作成したいと考えました。
【Node.js】TwitterAPI OAuth1.0 アクセストークン取得用の中間サーバを構築しよう - Qiita
そして以下のようなコードを書きデプロイを行いました。
typescript
1import * as functions from 'firebase-functions'; 2import * as passport from "passport"; 3import * as twitter from "passport-twitter"; 4 5 6// // Start writing Firebase Functions 7// // https://firebase.google.com/docs/functions/typescript 8// 9 10require('dotenv').config() 11 12// @ts-ignore 13passport.use(new twitter.Strategy({ 14 consumerKey: process.env['twitter.ck'], 15 consumerSecret: process.env['twitter.cs'], 16 callbackURL: 'http://127.0.0.1', 17 proxy: true 18 }, 19 function(token: any, tokenSecret: any, profile: any, cb: (arg0: null, arg1: any) => any) { 20 // In this example, the user's Twitter profile is supplied as the user 21 // record. In a production-quality application, the Twitter profile should 22 // be associated with a user record in the application's database, which 23 // allows for account linking and authentication with other identity 24 // providers. 25 console.log(`tkn ${token}`) 26 console.log(`tknsec ${tokenSecret}`) 27 console.log(`of ${JSON.stringify(profile)}`) 28 return cb(null, profile); 29 })); 30export const helloWorld = functions.https.onRequest((request, response) => { 31 response.send("Hello from Firebase!"); 32}); 33 34export const callback = functions.https.onRequest(((req, resp) => { 35 console.log(JSON.stringify(req.params)); 36 resp.send('ok'); 37})) 38 39export const login = functions.https.onRequest(((req, resp) => { 40 console.log(JSON.stringify(req.params)); 41 console.log(`ck: ${ process.env['twitter.ck']}`); 42 console.log(`cs: ${ process.env['twitter.cs']}`); 43 44 return passport.authenticate('twitter'); 45 46}))
しかし実際に /login エンドポイントにアクセスしても期待された結果になりません。リダイレクトされない考えられる原因を教えていただけないでしょうか?
期待していること: Twitter認証画面にリダイレクト
実際: リダイレクトは行われず、タイムアウトしてしまう(firebaseのログにlogin Function execution took 60003 ms, finished with status: 'timeout'
と記録される)
私がやったこと
- コンシューマーキーが環境変数として設定されていることを確認しました。
- コンシューマーシークレットが環境変数として設定されていることを確認しました。
- Blazeプランにアップグレードしました。
あなたの回答
tips
プレビュー