Firebase:sendSignInLinkToEmail()引发:“此Firebase项目已禁用给定的登录提供程序。”

时间:2019-02-15 06:13:38

标签: firebase firebase-authentication google-cloud-firestore

尝试:

import firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';

firebase.initializeApp(...);

const auth = firebase.auth();

// I inspected `auth` here to verify that I'm authenticating 
// with the right project where the Email/Password sign-in provider
// is enabled.

auth.createUserWithEmailAndPassword(email, password).then(() => {
  // All fine until here, new user is created.
  auth.sendSignInLinkToEmail(email, {
    url: window.location.href,
    handleCodeInApp: true,
  }).catch(error => {
    // Here, the error below is thrown.
  });
});

抛出:

  

[auth / operation-not-allowed]为此Firebase项目禁用了给定的登录提供程序。在Firebase控制台的“身份验证”部分的登录方法标签下启用该功能。

有趣的是,这可以按预期进行:

auth.onAuthStateChanged(user => {
  // some logic here, and then:
  user
    .sendEmailVerification()
    .then(() => {
      // email is sent fine
    })
});

Here是一个可重复的最小示例,它演示了该问题。请确保将电子邮件地址更改为以前没有使用过的电子邮件地址,以查看上面的错误。

此错误的原因可能是什么?

我正在使用firebase@5.8.3

2 个答案:

答案 0 :(得分:2)

电子邮件验证不是提供者。这就是为什么您可以使用它而不会看到operation-not-allowed错误的原因。它仅用于验证电子邮件。

电子邮件链接登录是一种登录方法,将允许用户使用该电子邮件链接登录。前者不需要启用,而后者则需要启用。 您可以按照Doug上面列出的说明启用它。

答案 1 :(得分:1)

错误消息告诉您确切的问题是什么以及如何解决。听起来您没有在Firebase控制台中启用电子邮件/密码身份验证方案。这是documented setup instructions的一部分:

  

开始之前

     
      
  1. 将Firebase添加到您的JavaScript项目中。
  2.   
  3. 如果尚未将应用程序连接到Firebase项目,请从Firebase控制台进行连接。
  4.   
  5. 启用电子邮件/密码登录:      
        
    • 在Firebase控制台中,打开“身份验证”部分。
    •   
    • 在“登录方法”选项卡上,启用“电子邮件/密码”登录方法,然后单击“保存”。
    •   
  6.