【问题标题】:Node: Can Passport be used to make Twitter API queries?节点:可以使用 Passport 进行 Twitter API 查询吗?
【发布时间】:2015-01-07 16:47:14
【问题描述】:

我刚开始学习 Node 和 Express(MEAN 堆栈),我想知道 PassportJS 可以用于查询 Twitter API v1.1,还是仅用于身份验证?

我已经构建了以下代码,但我没有从中得到任何想要的东西(应用程序崩溃):

我的控制器:

  /**
   * Module dependencies.
   */
  var mongoose = require('mongoose'),
      async = require('async'),
      passport = require('passport'),
      TwitterStrategy = require('passport-twitter').Strategy,
      _ = require('underscore');


  exports.auth = function(req, res, passport) {
        passport.use(new TwitterStrategy({
            consumerKey: '7rTisA540o3BkQPRItqog',
            consumerSecret: 'u5f4xShik2GSypDu7pFuXpRlf23nZdS1CeZCMSXE',
            callbackURL: "http://localhost:3000/auth/twitter/callback"
          },
          function(token, tokenSecret, profile, done) {
            console.log(token, tokenSecret, profile, done);
          }
        ));
  };

路线:

// Twitter API
app.get('/twitter', twitter.auth);

当我点击 Localhost:3000/twitter 时,我最终得到以下消息:

TypeError: Object function callbacks(err) {
      var fn = route.callbacks[i++];
      try {
        if ('route' == err) {
          nextRoute();
        } else if (err && fn) {
          if (fn.length < 4) return callbacks(err);
          fn(err, req, res, callbacks);
        } else if (fn) {
          if (fn.length < 4) return fn(req, res, callbacks);
          callbacks();
        } else {
          nextRoute(err);
        }
      } catch (err) {
        callbacks(err);
      }
    } has no method 'use'
    at exports.auth (/Users/nfento/Sites/mean-stack/app/controllers/twitter.js:12:16)
    at callbacks (/Users/nfento/Sites/mean-stack/node_modules/express/lib/router/index.js:164:37)
    at param (/Users/nfento/Sites/mean-stack/node_modules/express/lib/router/index.js:138:11)
    at pass (/Users/nfento/Sites/mean-stack/node_modules/express/lib/router/index.js:145:5)
    at Router._dispatch (/Users/nfento/Sites/mean-stack/node_modules/express/lib/router/index.js:173:5)
    at Object.router (/Users/nfento/Sites/mean-stack/node_modules/express/lib/router/index.js:33:10)
    at Context.next (/Users/nfento/Sites/mean-stack/node_modules/express/node_modules/connect/lib/proto.js:190:15)
    at Context.actions.pass (/Users/nfento/Sites/mean-stack/node_modules/passport/lib/passport/context/http/actions.js:77:8)
    at SessionStrategy.authenticate (/Users/nfento/Sites/mean-stack/node_modules/passport/lib/passport/strategies/session.js:67:10)
    at attempt (/Users/nfento/Sites/mean-stack/node_modules/passport/lib/passport/middleware/authenticate.js:243:16)

我对此完全陌生,我希望获得身份验证令牌,然后从那里我可以查询 API,但是,我无法超越第一步。我是在代码中做错了什么,还是我错误地使用了 Passport 库?

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

    看起来在exports.auth 函数内部,passport 参数不是您所期望的。您已在应用程序中剪切了大部分代码,因此不清楚您在其他地方是如何使用该功能的,但似乎参数(护照库本身)未正确传递。

    您可以单步调试代码并使用调试器检查该参数的值并找出问题所在。详情见这个问题:https://stackoverflow.com/a/3944507/1801

    【讨论】:

    • 我应该提到我正在使用mean.io 样板,我列出的代码是我迄今为止添加到项目中的唯一代码。
    猜你喜欢
    • 2015-10-16
    • 2016-06-02
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多