0

node.jsntwitterパッケージを使用してtwitterでログインを実装しようとしています。

https://github.com/AvianFlu/ntwitter

クレデンシャルをハードコーディングすればAPI呼び出しを正しく行うことができますが、認証のためのOauthリクエストを機能させることができないようです。

Express.jsを使用しています。最初の「おもちゃ」の例を機能させようとしているので、この時点で直接訪問している別のルートを作成しました。

app.get('/twitter_login', function(req, res){
var twitter = require('ntwitter');
var twit = new twitter({
    consumer_key: '<Valid Consumer Key>',
    consumer_secret: '<Valid Consumer Secret'});
var tlog = twit.login(req,"/login_success");
tlog(res,req,null); //Not sure on this at all

今私が受け取るエラーは

DEBUG: TypeError: Parameter 'url' must be a string, not undefined
    at Object.urlParse [as parse] (url.js:96:11)
    at handle (/usr/local/lib/node_modules/ntwitter/lib/twitter.js:341:20)
    at <my app path>/app.js:47:3

少し質問があります

  1. ntwitter関数は、「handle」という名前の関数を返します。なぜそれが名付けられたのですか?それを呼び出すための最良の方法は何ですか?
  2. ログインが2段階で行われるのはなぜですか?なぜログイン機能だけではないのですか?
  3. 最も重要なこと:ユーザーがログインできるように、ユーザーをTwitterにリダイレクトするにはどうすればよいですか?

私はここではかなり軌道に乗っていないかもしれませんが、より良い方法を自由に提案してください。でも、本当にntwitterにこだわっていきたいです。

ありがとう。

4

2 に答える 2

1

これを理解しました。

2 根本的な問題

  1. 'handle' への呼び出しのパラメーターが順不同です

    もともと持っていた

tlog(res、req、null);

これは

tlog(res、req、null);

2.. twitter_login の最後でテンプレート ファイルをレンダリングしていたため、リダイレクトの問題が発生していました。

======

元の質問に答えるには

ntwitter 関数は、'handle' という名前の関数を返します。なぜ名前が付けられたのですか?それを呼び出す最良の方法は何ですか?

コールスタックで見やすくなる可能性が高い名前

そのように呼ぶことができます

twit.login(path.pathname,"/twitter_callback")(req,res)

ログインが 2 段階で行われるのはなぜですか? ログイン機能だけではないのはなぜですか?

これらは互いに結びついていますが、2 番目の呼び出しでは、より慣用的な方法で必要な情報を渡すことができます。

最も重要なこと: ユーザーがログインできるように、ユーザーを Twitter にリダイレクトするにはどうすればよいですか?

動作するサンプル アプリケーションを含む github リポジトリを作成しました。

https://github.com/drouillard/sample-ntwitter

于 2012-08-13T16:52:42.863 に答える
0

ntwitterでも問題がありました。しかし、Twitter の API を調べた後、独自のラッパーを試みないことにしました。

そこで、Twitter にリダイレクトする通常のプロセスを実行してから、アクセス トークンを取得するコールバック ページを用意して、OAuth を機能させました。渡されたトークンとシークレットを取得したら、次のように ntwitter を使用できます。

var ntwitter = require('ntwitter');
var twit = new ntwitter({
    consumer_key: clientId,
    consumer_secret: secret,
    access_token_key: token,
    access_token_secret: tokenSecret    
})

// now you can do something like:
twit.getUserTimeline({
    include_rts: 1,
    count: 50
}, function(err, json) {
    // ...
});

それが役立つことを願っています。

于 2012-08-09T22:47:09.453 に答える