TypeError: firebase.auth(...).onAuthStateChanged 不是函数

Posted

技术标签:

【中文标题】TypeError: firebase.auth(...).onAuthStateChanged 不是函数【英文标题】:TypeError: firebase.auth(...).onAuthStateChanged is not a function 【发布时间】:2018-08-17 07:09:37 【问题描述】:

我正在尝试使用 onAuthStateChanged 触发器,但在使用“firebase deploy”时我得到“不是函数”。 执行时:

firebase deploy

我收到以下错误:

Error: Error occurred while parsing your function triggers.
TypeError: firebase.auth(...).onAuthStateChanged is not a function
    at Object.<anonymous> (/home/ihab/Desktop/BlueDot/bluedot/functions/index.js:33:17)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Module.require (module.js:587:17)
    at require (internal/module.js:11:18)
    at /usr/lib/node_modules/firebase-tools/lib/triggerParser.js:18:11
    at Object.<anonymous> (/usr/lib/node_modules/firebase-tools/lib>/triggerParser.js:38:3)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)

我还尝试了由 Joao Lopes 在this question ut 发布的解决方案中提到的 firebase.default.auth.onAuthStateChanged,但它给出了同样的错误!

我的域已经添加了 Firebase 项目>身份验证>登录方法>授权域。

我正在使用:Ubuntu 16.04,npm 5.6.0,Firebase Spark。 这是我的 package.json:


  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": 
    "serve": "firebase serve --only functions",
    "shell": "firebase experimental:functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  ,
  "dependencies": 
    "consolidate": "^0.15.0",
    "express": "^4.16.2",
    "firebase-admin": "^5.8.2",
    "firebase-functions": "^0.8.1",
    "handlebars": "^4.0.11"
  ,
  "private": true

还有我的 index.js:

const functions = require('firebase-functions');
const firebase=require('firebase-admin');
const express=require('express');
const engines=require('consolidate'); 

firebase.initializeApp(functions.config().firebase);


const app=express();
app.engine('hbs',engines.handlebars);
app.set('views','./views');
app.set('view engine','hbs');

app.get('/',(req,res)=>
    res.render('index',Loginsignup:"LoginSignup");
);

/*Here is the probleme*/
firebase.auth().onAuthStateChanged(function(user) 
     user.sendEmailVerification();
     if(!auth.currentUser.emailVerified)
         user.sendEmailVerification();
         console.log('signed in');
     
);
/********************/

exports.app = functions.https.onRequest(app);

那么我错过了什么?

【问题讨论】:

【参考方案1】:

firebase-admin SDK 中没有onAuthStateChanged 函数。此功能仅在客户端包中可用。

Firebase 管理员身份验证参考:https://firebase.google.com/docs/reference/admin/node/admin.auth.Auth

Firebase javascript 身份验证参考:https://firebase.google.com/docs/reference/js/firebase.auth.Auth

【讨论】:

最后,客户端和服务器端实现之间的这种差异让我发疯了 5-6 个小时,谢谢 sarneeh【参考方案2】:

您正在尝试使用管理 SDK 登录。

onAuthStateChanged 不住在这里。 https://firebase.google.com/docs/reference/admin/node/admin.auth

首先将 firebase 客户端包添加到您的项目中。

$ npm install firebase --save

并更改const firebase=require('firebase-admin'); => const firebase=require('firebase');

这可能就足够了。不确定是否需要在客户端将不同的凭据传递给 initializeApp()

这是客户端文档中的授权。 https://firebase.google.com/docs/reference/node/firebase.auth.Auth

【讨论】:

以上是关于TypeError: firebase.auth(...).onAuthStateChanged 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

将 Vue 2 迁移到 Vue 3,typeError: Vue is not a constructor

致命错误:找不到模块“firebase_auth”@import firebase_auth

GeneratedPluginConstraint,致命错误:找不到模块“firebase_auth”@import firebase_auth;

firebase.auth().currentUser 为空

如何在 firebase-functions 中使用 firebase.auth()?

错误:名称“用户”在库“package:firebase_auth/firebase_auth.dart”和“package:quizmaker/models/user.dart”中定义