質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

3173閲覧

Firebase Functionsで関数呼び出しで"Error Domain=com.firebase.functions Code=16 "

ttah

総合スコア35

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2021/04/23 06:53

編集2021/04/23 15:39

Firebase Functionsへデプロイ済の関数を呼び出して
SripeのcustomerIdを取得を試みましたが
承認エラーが返ってきてしまいました

Error Domain=com.firebase.functions Code=16 "UNAUTHENTICATED" UserInfo={NSLocalizedDescription=UNAUTHENTICATED}

Functionsのログは呼び出し時間には何も反応がないのと
使用状況の呼び出しは0のままになっています

対応策が分かるお方がおられたらご教授お願いいたします

swift

1 let user = Auth.auth().currentUser 2 if let user = user { 3 let email = user.email 4 log.debug(email) 5 6 7 createCustomerId(email: email!, completion: { customerId, err in 8 if let err = err { 9 log.debug(err) 10 } 11 if let id = customerId { 12 log.debug(id) 13 } else { 14 log.debug("createCustomerId: nil") 15 } 16 } ) 17 } 18 19 20 func createCustomerId(email: String, completion: ((String?, Error?) -> Void)?){ 21 let data: [String: Any] = [ 22 "email": email 23 ] 24 functions.httpsCallable("createStripeCustomer") 25 .call(data) { result, error in 26 27 if let error = error { 28 completion!(nil, error) 29 } else if let data = result?.data as? [String: Any], 30 let customerId = data["customerId"] as? String { 31 completion!(customerId, nil) 32 } 33 } 34 } 35 36

呼び出したい関数

Typescript

1import * as functions from "firebase-functions"; 2 3const stripe = require('stripe')(functions.config().stripe.token); 4 5// MARK: – stripeのcustomerを作ってcustomerIdを返す 6exports.createStripeCustomer = functions.https.onCall(async (data, context) => { 7 const email = data.email; 8 const customer = await stripe.customers.create({email: email}); 9 const customerId = customer.id; 10 return { customerId: customerId } 11});

「Cloud Functions 起動元」の権限を追記しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomato879241

2021/04/23 07:57

「SripeのcustomerIdを取得を試みましたが」とありますが、「Sripe」か「Stripe」か何か知りませんが、それだけの説明では何の話をしているのかわかりません。
guest

回答1

0

ベストアンサー

デプロイしてしばらく待ってから、もう一度リクエストすると、今度は成功しませんか?

私も最近Cloud FunctionsでUNAUTHENTICATEDのエラーが返ってきたので調べたのですが、どうもデプロイしてすぐにリクエストすると、そのエラーが発生するようでした。

どのような時に UNAUTHENTICATED が返って来るかですが、

https://cloud.google.com/functions/docs/securing/managing-access-iam#allowing_unauthenticated_function_invocation

のドキュメントに貼り付けられている「Google Cloud Consoleに移動」のボタンをクリックすると、(Firebaseではなく)Google Cloud PlatformのCloud Functionsのコンソールが開き、デプロイした関数が表示されているはずです。その中の「Authentication」の項目が「未認証を許可」と表示されていれる状態でリクエストすれば関数は実行されました。

逆に、そこの表示が空白になっている時にリクエストするとUNAUTHENTICATEDのエラーになりましたが、しばらくたつと「未認証を許可」に変更され、その後はリクエストが成功しました。関数をデプロイしてから権限が付与されるまでに少し時間がかかるのかなと思いました。

もし、しばらく待っても「未認証を許可」にならないのであれば、そのコンソールでallUsersに「Cloud Functions 起動元」の権限を付与すればいいのだろうと思います。

投稿2021/04/23 14:51

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttah

2021/04/23 15:35

TakeOne様回答ありがとうございます。 デプロイ後すぐにリクエストしていたので再び試みましたがエラーが返ってきました。(デプロイから11時間後) 貼り付けて頂いたリンクから「Authentication」の項目を確認した所やはり空白となっていたので こちらが原因のようです(原因は分かり非常に助かりました) 現在はご教授頂いようにコンソールで「Cloud Functions 起動元」の権限を確認した所 allUsersになっていますが(質問に写真追記しました) 「Authentication」の項目は空白状態です 更にCloud Functions 起動元の権限にサービスアカウントのメールアドレスをメンバーとして追加してみましたが「未認証を許可」にはなりませんでした。 時間を置いてからまた確認してみたいと思います。 解決にはまだ至っていませんが原因が分かっただけでも本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問