【问题标题】:Node.js: OAuth2Strategy requires a clientID optionNode.js:OAuth2Strategy 需要一个 clientID 选项
【发布时间】:2021-01-21 05:17:42
【问题描述】:

我正在设置由另一位开发人员创建的 MERN 堆栈项目,但出现错误:

node_modules/passport-oauth2/lib/strategy.js:82
[0]   if (!options.clientID) { throw new TypeError('OAuth2Strategy requires a clientID option'); }
[0]                            ^
[0] 
[0] TypeError: OAuth2Strategy requires a clientID option

如果我理解正确的话,.env文件中应该有clientID,而项目中没有这样的文件,对吧?

【问题讨论】:

  • 问你几个问题:1)你使用的护照策略是什么?可能是passport-linkedin-oauth2 还是其他? 2)您是否在护照策略中设置了clientID,至于来自oauth2提供者的clientID?分享一些代码来重现错误
  • 我有同样的错误,你设法解决了吗
  • @Ahmed 检查我的答案

标签: javascript node.js


【解决方案1】:

对我来说,我做了这样的事情

passport.use(
    new FacebookStrategy(
        {
            clientID: config.FACEBOOK_APP_ID,
            clientSecret: config.FACEBOOK_CONSUMER_SECRET,
            callbackURL: config.FACEBOOK_REDIRECT_URL,
            profileFields: ['id', 'displayName', 'email']
        },

但我忘记在我的配置文件中添加我的FACEBOOK_APP_ID。只需确保您传递的 clientId 不为 null 或未定义

【讨论】:

    【解决方案2】:

    一定要 npm install dotenv,并添加 require('dotenv').config();到 app.js 文件的顶部。

    【讨论】:

    • 如果您在解决方案周围添加更多细节,您的答案可能会得到显着改善。您还可以准确解释导致错误的原因 - 发帖人似乎不太确定。
    【解决方案3】:

    一定要 npm install dotenv,并添加 require('dotenv').config();到 app.js 文件的顶部。

    虽然@ColsonRice 的回答并不是我收到上述错误OAuth2Strategy requires a clientID option 的确切原因,但它确实为我指明了正确的方向。在尝试让我的 NodeJs express 服务器的 Typescript 版本在 Heroku 上运行时,我已经更改(返回 10 次提交),我的 package.json 启动脚本来自

    "start": "node -r dotenv/config ./dist/index.js",
    

    "start": "node dist/index.js",
    

    更改开发启动以使用带有 dotenv/config 选项的替代启动命令解决了我的问题。我的 package.json 脚本部分的最后 4 行如下:

    "dev": "nodemon --exec npm run restart",
    "restart": "rimraf dist && npm run build && npm run devstart",
    "devstart": "node -r dotenv/config ./dist/index.js",
    "start": "node dist/index.js",
    

    所以对我来说,科尔森的负分是不合理的,因为它间接帮助我解决了我的问题。

    【讨论】:

      【解决方案4】:

      问题是 config.FACEBOOK_CLIENT_ID 而不是 config.FACEBOOK_APP_ID

      错误策略:

      passport.use(
          new FacebookStrategy(
              {
                  clientID: config.FACEBOOK_CLIENT_ID,
                  clientSecret: config.FACEBOOK_CONSUMER_SECRET,
                  callbackURL: config.FACEBOOK_REDIRECT_URL,
                  profileFields: ['id', 'displayName', 'email']
              },
      

      正确的策略:

      passport.use(
          new FacebookStrategy(
              {
                  clientID: config.FACEBOOK_APP_ID,
                  clientSecret: config.FACEBOOK_CONSUMER_SECRET,
                  callbackURL: config.FACEBOOK_REDIRECT_URL,
                  profileFields: ['id', 'displayName', 'email']
              },
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-26
        • 2020-06-06
        • 1970-01-01
        • 1970-01-01
        • 2020-04-13
        • 2017-03-31
        • 2013-04-12
        • 1970-01-01
        相关资源
        最近更新 更多