【问题标题】:'this' undefined in npm package'this' 在 npm 包中未定义
【发布时间】:2015-03-16 22:42:03
【问题描述】:

我正在尝试通过 OAuth2 向 Google 进行身份验证,并且我正在使用 googleapis NPM 包。为此,我正在创建一个小型本地包以在我的项目中使用:

Package.js

Npm.depends({
  "googleapis": "2.0.1"
});

Package.describe({
  name: 'google-tokens',
  summary: 'Library for requesting Google API tokens',
  version: '0.0.1'
});

Package.onUse(function (api) {
  api.use(['underscore', 'http', 'service-configuration', 'oauth', 'accounts-oauth'], ['client', 'server']);

  api.addFiles('lib/tokens_client.js', 'client');
  api.addFiles('lib/tokens_server.js', 'server');

  api.export(['Tokens']);
});

tokens_server.js(包)

Tokens = (function() {
  Google       = Npm.require('googleapis');
  OAuth2Client = Google.auth.OAuth2;
  var my       = {};

  my.fetchTokens = function(code) {
    var clientId     = Meteor.settings.google.CLIENT_ID;
    var clientSecret = Meteor.settings.google.CLIENT_SECRET;
    var redirect     = Meteor.settings.google.REDIRECT_URL;

    oauth2Client = OAuth2Client(clientId, clientSecret, redirect);

    var response = Async.runSync(function(done) {
      oauth2Client.getToken(code, function(error, tokens) {
        done(error, tokens);
      });
    });

    console.log(response);
    return response;
  };

  ....

但是,上面的代码返回

Exception while invoking method 'addChannel' TypeError: Cannot set property 'transporter' of undefined
I20150316-23:33:03.520(1)?     at AuthClient (/Users/madsh/Programming/Projects/youtubr/packages/google-tokens/.npm/package/node_modules/googleapis/node_modules/google-auth-library/lib/auth/authclient.js:25:20)
I20150316-23:33:03.520(1)?     at OAuth2Client (/Users/madsh/Programming/Projects/youtubr/packages/google-tokens/.npm/package/node_modules/googleapis/node_modules/google-auth-library/lib/auth/oauth2client.js:38:23)
I20150316-23:33:03.520(1)?     at Object.my.fetchTokens (packages/google-tokens/lib/tokens_server.js:11:1)

指的是.npm/package/node_modules/googleapis文件夹中node_modules文件夹里面的这一部分,里面包含以下内容

'use strict';

var DefaultTransporter = require('../transporters.js');

/**
 * Base class for authentication clients.
 */
function AuthClient() {
  this.transporter = new DefaultTransporter(); <---------- Failing line
}
/**
 * Export AuthClient.
 */
module.exports = AuthClient;

我不知道为什么会这样,有什么建议吗?

【问题讨论】:

  • 应该是new OAuth2Client(clientId, clientSecret, redirect);?关键是缺少的new
  • 你有什么理由使用这个而不是官方帐户谷歌包?
  • 是的,因为我想为每个用户帐户存储几个访问令牌,这些不应该用于登录。这对于帐户包 afaik 是不可能的

标签: node.js meteor google-api npm google-authentication


【解决方案1】:

您应该将身份验证客户端创建为实例,即

var client = new Oauth2Client(...

【讨论】:

    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-01
    • 2016-08-21
    • 2018-10-06
    相关资源
    最近更新 更多