2017-11-07 33 views
4

私はこれにとても近いです。Firebase HTTPタイムアウトのクラウド機能

私は、AzureトークンからカスタムミントにFirebaseトークンを送信し、このトークンをクライアントに送り返すクラウド機能を作成しました。

トークンは正しく作成されますが、HTTPリクエストでは返されません。

残念ながら、私のFirebaseアプリケーションはタイムアウトを引き起こします。

機能の実行が60002ミリ秒を要し、ステータスで終了:「タイムアウト」

を私は本当に、それがある理由の周りので、この記事を私の頭をラップすることはできません。私のコードに何か問題がありますか、それともHTTP要求を間違って呼びますか?

ここには、Firebase関数コンソールから取得したログがあります。

parameters = [ 
    "uid" : id, 
    "email" : mail, 
    "name" : name 
] 

答えて

2

Firebase functions log

はここ

私は、このHTTPリクエストを作ってるんだ
// Create a Firebase token from any UID 
exports.createFirebaseToken = functions.https.onRequest((req, res) => { 

    // The UID and other things we'll assign to the user. 
    const uid = req.body.uid; 
    const additionalClaims = { 
    name: req.body.name, 
    email: req.body.email 
    }; 

    // Create or update the user account. 
    const userCreationTask = admin.auth().updateUser(uid, additionalClaims).catch(error => { 

    // If user does not exists we create it. 
    if (error.code === 'auth/user-not-found') { 
     console.log(`Created user with UID:${uid}, Name: ${additionalClaims.name} and e-mail: ${additionalClaims.email}`); 
     return admin.auth().createUser({ 
     uid: uid, 
     displayName: displayName, 
     email: email, 
     }); 
    } 
    throw error; 
    console.log('Error!'); 
    }); 

    // Wait for all async tasks to complete, then generate and return a custom auth token. 
    return Promise.all([userCreationTask]).then(() => { 
    console.log('Function create token triggered'); 
    // Create a Firebase custom auth token. 
    return admin.auth().createCustomToken(uid, additionalClaims).then((token) => { 
     console.log('Created Custom token for UID "', uid, '" Token:', token); 
     return token; 
    }); 
    }); 
}); 

は、私が送るよすべてがこのようになりますJSONである私のコードですHTTP要求によってトリガされるクラウド機能は、終了するには、send(),redirect()、またはで終了する必要がありますそれ以外の場合は実行を継続してタイムアウトになります。 terminate HTTP functions section of the documentation on HTTP triggersから

常にsend()redirect()、またはend()とHTTPの機能を終了します。そうしないと、機能が引き続き実行され、システムによって強制終了される可能性があります。 Sync, Async and Promisesも参照してください。

のNode.js momentモジュールを使用してサーバの時刻を取得し、フォーマットした後、date()機能は、HTTPレスポンスに結果を送信することにより結論:

const formattedDate = moment().format(format); 
console.log('Sending Formatted date:', formattedDate); 
res.status(200).send(formattedDate); 

だから、あなたのコード内で、あなたが送ることができます返信のトークンはsend()となります。例:

// ... 
// Create a Firebase custom auth token. 
return admin.auth().createCustomToken(uid, additionalClaims).then((token) => { 
    console.log('Created Custom token for UID "', uid, '" Token:', token); 
    res.status(200).send(token); 
    return token; 
}); 
// ... 
関連する問題