首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >流星复位后流星的ServiceConfiguration断裂

流星复位后流星的ServiceConfiguration断裂
EN

Stack Overflow用户
提问于 2020-04-21 16:17:25
回答 1查看 116关注 0票数 0

在我对我的项目运行meteor reset之后发生了这个错误

代码语言:javascript
复制
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)
...

这是调用ServiceConfiguration的文件:

Heading.js

代码语言:javascript
复制
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文件下:

代码语言:javascript
复制
import { ServiceConfiguration } from 'meteor/service-configuration';

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

我无法理解这个错误。在我运行meteor reset之前,它是起作用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-21 17:32:29

我已经想明白了。回答这个问题是为了帮助那些将来可能也遇到这个问题的人。

因为我做了meteor reset,这个项目就被重置为0。所以我需要将服务配置细节重新插入到mongo集合meteor_accounts_loginServiceConfiguration中.我想我无意中删除了我的server/main.js文件中的upsert命令。因此,在我完成meteor reset之后,服务配置是空的,并且Meteor.startup()中没有补充所需细节的代码。

下面是应该留在server/main.js中的代码

代码语言:javascript
复制
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
      }
    }
  );

});

如果您想知道如何使用clientIdsecret,请转到Google控制台这里,创建一个新项目,并相应地配置凭证和OAuth同意书屏幕。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61348150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档