Конфигурация службы метеора прервана после сброса метеора - PullRequest
0 голосов
/ 21 апреля 2020

Эта ошибка произошла после того, как я запустил meteor reset в моем проекте

Uncaught TypeError: Cannot read property 'findOne' of undefined
at onLoginWithGoogle (Heading.js:23)
at Button._this.handleClick (modules.js?hash=aa2df6fbe7f4a6a52d262a213d0cfff2a56dcdc2:10098)
at HTMLUnknownElement.callCallback (modules.js?hash=aa2df6fbe7f4a6a52d262a213d0cfff2a56dcdc2:32249)
...

Этот файл вызывает конфигурацию службы:

Заголовок. js

import React, { useContext, useState } from 'react'
import { Meteor } from 'meteor/meteor';
import ServiceConfiguration from 'meteor/service-configuration'
...

function Heading(props){
    const context = useContext(Context);
    const [error, setError] = useState('');

    const onLoginWithGoogle = () => {
        const {scope} = ServiceConfiguration.configurations.findOne({service: 'google'}); //this is where it failed

        Meteor.loginWithGoogle(
          {requestPermissions: scope, requestOfflineToken: true },
          error => {
            if (error) {
              if (error.errorType === 'Accounts.LoginCancelledError') return;
              alert('Login error', error);
            } else {
              //
            }
          }
        );
    };
}
//export

Конфигурация службы хранится в папке server в файле service-configuration.js:

import { ServiceConfiguration } from 'meteor/service-configuration';

ServiceConfiguration.configurations.update(
  { service: 'google' },
  {
    $set: {
      clientId: 'XXX',
      loginStyle: 'popup',
      secret: 'XXXX'
    }
  }
);

Я не могу разобраться с этой ошибкой. Это работало до того, как я запустил meteor reset.

1 Ответ

0 голосов
/ 21 апреля 2020

Я понял это. Ответьте на это, чтобы помочь другим, кто мог столкнуться с этой проблемой в будущем.

Поскольку я сделал meteor reset, проект сбрасывается до 0. Поэтому мне нужно заново вставить детали конфигурации службы в коллекцию mon go meteor_accounts_loginServiceConfiguration ... Я думаю, что я случайно как-то удалил команду upsert в моем файле server/main.js. Поэтому после того, как я сделал meteor reset, сервисная конфигурация пуста, и в Meteor.startup() нет кода, который повторяет sh необходимые детали.

Вот код, который должен остаться в server/main.js:

Meteor.startup(() => {
  // first, remove configuration entry in case service is already configured
  Accounts.loginServiceConfiguration.remove({
      service: "google"
    });
  Accounts.loginServiceConfiguration.upsert(
    { service: 'google' },
    {
      $set: {
        clientId: 'XXX', // change this to your actual clientId
        loginStyle: 'popup',
        secret: 'XXX' //change this to your actual secret
      }
    }
  );

});

В случае, если вам интересно, как использовать clientId и secret, перейдите на консоль API Google здесь , создайте новый проект и настройте учетные данные и соответственно экран подтверждения OAuth.

...