2017-10-31 15 views
0

私は何時間も検索しましたが、これに関する1つの関連するものを見つけることができませんでした。ExpressでFirebase - .catch(エラー)でクライアントに応答を返せません

私はユーザー(管理者)の認証のために私のエクスプレスウェブサーバでfirebaseを使用しています。私は基本的に、モバイルアプリとは別の管理者のための別個のコントロールパネルを持っているので、ユーザーからのデータを制御することができます。

私は現在、次の処理を行い、このポストアドレスを持っている:

app.post('/createNewAdminAccount', function(req, res){ 
    const password = bcryptPassword(bcryptDetails, req.body.password); 
    const username = req.body.username; 
    const auth = firebase.auth(); 
    let userExists = false; 

    function userExistsResponse(){ 
    res.setHeader('Content-Type', 'application/json'); 
    res.send(JSON.stringify({ "userExists": true })); 
    } 

    const promise = auth.createUserWithEmailAndPassword(username, String(password)); 
    promise.catch(function(error){ 
    console.log(error.message); 
    userExistsResponse(); 
    }); 
}); 

私はuserExistsResponse();を持っている方法は、私はそれを持って正確にどのようにではなく、明確化のために、それはそのようなものです。

.catch()の機能は、console.log()しか受け入れられないようです。私はを積み重ねることを示唆するthisを見ましたが、それはどのように書いても動作せず、catch(error)のどちらもうまく動作していないようです。

目的は、ユーザーが認証されていることを確認し、クライアントにメッセージをそのまま表示することです。私は変数をtrueに設定しようとしました(let userExists = false変数の残量で分かるように)なしの.then()ステートメントを実行して関数を呼び出しました(サーバーがエラーで壊れます) YouTubeのビデオ、Firebaseのドキュメント、StackOverflowを見ても、私は有用な答えを見つけられませんでした。

FIXEDクレジット:0x17の

app.post('/createNewAdminAccount', authenticated, function(req, res){ 
    const password = String(bcryptPassword(bcryptDetails, req.body.password)); 
    const username = req.body.username; 

    admin.auth().getUserByEmail(username) 
    .then(function(userRecord) { 
     res.setHeader('Content-Type', 'application/json'); 
     res.send(JSON.stringify({ 'userExists': true })); 
     console.log('User Exists'); 
    }) 
    .catch(function(error) { 
     const promise = auth.createUserWithEmailAndPassword(username, password); 
     promise.catch(function(error){ 
     console.log(error.message); 
     }); 
     console.log('User Created'); 
    }); 
}); 

答えて

0

私はそれを見る方法から、createNewAdminAccountルートのために、なぜあなたはadmin.auth().getUserByEmail()を使用して最初の場所でユーザーのチェックをしません。応答コードauth/email-already-existsを分析するか、またはlinkに記載されている一部の組み合わせを分析してから、admin.auth().createUser()に進みますか?

の場合は、次の方法を使用して同じエラーコードを分析しないでください。

firebase.auth().signInWithEmailAndPassword(email, password).catch(function(error) { 
    // Handle Errors here. 
    var errorCode = error.code; 
    var errorMessage = error.message; 
    // ... 
}); 
+0

これは完全に機能しました。ありがとうございます。私は '.res'関数を' .then() 'に置き、' auth.create ... 'を' .catch() 'エラーに入れます。 –

関連する問題