web-dev-qa-db-ja.com

firebase.auth()。createUserWithEmailAndPasswordUndefinedは関数ではありません

ユーザー管理に関するFirebaseのドキュメントに従っています

var firebase = require('firebase');

// Initialize Firebase
firebase.initializeApp({
    serviceAccount: "./<mysecreturledittedout>.json",
    databaseURL: "https://<mydatabaseurljusttobesafe>.firebaseio.com"
});

router.get('/create', function(req, res){
    var email = req.email;
    var password = req.password;
    firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(err){ // LINE 27 CRASH
        var errorCode = err.code;
        var errorMessage = error.message;
        console.log("ERROR");
        console.log(errorCode, errorMessage);
    });
});

次のエラーが発生します

undefined is not a function

TypeError: undefined is not a function
    at d:\Users\Kitty\Code\Practice2\routes\index.js:27:21

少し調べてみると、undefinedは関数ではなく、基本的にはnullポインター例外のjavascriptバージョンです(間違っている可能性があります)

Firebaseでサービスアカウントとプロジェクトを設定しました。私はこれをローカルホストで実行しています。ありがとう。何が機能していないかをテストする方法がわからないため、主にデバッグのヒントを探しています。

9
Script Kitty

まだ問題を修正していない場合は、なぜこのようなエラーが発生するのかがわかりました。これは、実際には関数ではないためです。

サーバーリファレンスを使用する必要がある場合は、ガイドとしてWebリファレンスを使用しています: https://firebase.google.com/docs/reference/node/firebase.auth.Auth

ご覧のとおり、Firebase.auth.Authは、Web APIと比較すると、Node.js APIにはそれほど多くないため、大きく異なります。サーバーAPIを使用する場合は、ここでは詳しく調べていないトークンを処理する必要があります。一方、意図したことを実行するWebAPIを使用することもできます。

6
Sammy Franklin

更新
Node.jsのfirebase3.4.1またはそれ以前に、createUserWithEmailAndPasswordが利用可能になりました。

オリジナル
Node.jsのfirebase3.1.0の時点では、createUserWithEmailAndPasswordはまだサポートされていません。 Firebase Googleグループの回答によると、3.xライブラリの機能がすべてのプラットフォームで同等であるとは限りません。 RESTインターフェースはユーザー作成をサポートしますが、Node.jsライブラリーを使用する場合とは明らかに異なるアプローチです。

https://groups.google.com/forum/#!forum/firebase-talk にアクセスし、createUserWithEmailAndPasswordを検索して、そのディスカッションの最新情報を入手してください。

3
19Craig

これが正しいかどうかはわかりませんが、次のことに役立ちます。

  1. Console.firebase.google.comでスクリプトを取得します。
<script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js"></script>

および構成:

var config = {
    apiKey: "xxxxxxxxxxxxxxx",
    authDomain: "project-nnnnnnnnnnn.firebaseapp.com",
    databaseURL: "https://project-nnnnnnnnnnn.firebaseio.com",
    storageBucket: "project-nnnnnnnnnnn.appspot.com",
};
  1. からfirebase.jsファイルをコピーします
<script src="https://www.gstatic.com/firebasejs/live/3.0/firebase.js"></script>

ローカルプロジェクトfb/firebase.jsへ

  1. Firebas-service.tsの場合:
    var firebase = require('./fb/firebase');
// Initialize Firebase
var config = {
    apiKey: "xxxxxxxxxxxxxxx",
    authDomain: "project-nnnnnnnnnnn.firebaseapp.com",
    databaseURL: "https://project-nnnnnnnnnnn.firebaseio.com",
    storageBucket: "project-nnnnnnnnnnn.appspot.com",
};
firebase.initializeApp(config);

export function createUser (email : string, password:string){
    firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error) {
        if (error.code){
            // Handle Errors here.
            var errorCode = error.code;
            var errorMessage = error.message;
            alert(errorMessage);
            console.log(errorMessage);
        }
        else{
            // ...
        }
    });
}
1
Petr Gudym

これは、エラーを「err」と定義したが、errorMessageの下で「error.message」がコードだったことが原因である可能性がありますか?よくわかりませんが、これを試して、修正されるかどうかを確認してください。

var firebase = require('firebase');

// Initialize Firebase
firebase.initializeApp({
    serviceAccount: "./<mysecreturledittedout>.json",
    databaseURL: "https://<mydatabaseurljusttobesafe>.firebaseio.com"
});

router.get('/create', function(req, res){
    var email = req.email;
    var password = req.password;
    firebase.auth().createUserWithEmailAndPassword(email, password).catch(function(error){ 
        var errorCode = error.code;
        var errorMessage = error.message;
        console.log("ERROR");
        console.log(errorCode, errorMessage);
    });
});
0
Collin