gpt4 book ai didi

flutter - 如何从 firebase_auth 获取 token

转载 作者:行者123 更新时间:2023-12-04 11:22:15 26 4
gpt4 key购买 nike

我想从 firebase(电子邮件和密码身份验证)获取身份验证 token 以在我的 firebase 云功能中进行身份验证。似乎函数 getIdToken() 和 getToken() 都不适用于 firebase_auth 包。

是否有其他功能,或者是否有更好的主意来确保只有经过身份验证的用户才能触发云功能?

var token = await FirebaseAuth.instance.currentUser.getIdToken();
var response = await httpClient.get(url,headers: {'Authorization':"Bearer $token"});

最佳答案

我同意@Doug 对此的看法 - callable 为您包装了它并且会更容易 - 但我的用例要求我进行 HTTPS 调用(函数中的 onRequest)。另外,我认为你只是在正确的道路上 - 但你是 可能 不在您的 Cloud Functions 中检查它。

在您的应用程序中,您将调用:

_httpsCall() async {
// Fetch the currentUser, and then get its id token
final user = await FirebaseAuth.instance.currentUser();
final idToken = await user.getIdToken();
final token = idToken.token;

// Create authorization header
final header = { "authorization": 'Bearer $token' };

get("http://YOUR_PROJECT_BASE_URL/httpsFunction", headers: header)
.then((response) {
final status = response.statusCode;
print('STATUS CODE: $status');
})
.catchError((e) {
print(e);
});
}

在您的函数中,您将检查 token :

export const httpsFunction = functions.https.onRequest((request, response) => {
const authorization = request.header("authorization")

if (authorization) {
const idToken = authorization.split('Bearer ')[1]
if (!idToken) {
response.status(400).send({ response: "Unauthenticated request!" })
return
}

return admin.auth().verifyIdToken(idToken)
.then(decodedToken => {
// You can check for your custom claims here as well
response.status(200).send({ response: "Authenticated request!" })
})
.catch(err => {
response.status(400).send({ response: "Unauthenticated request!" })
})
}

response.status(400).send({ response: "Unauthenticated request!" })
})

记住:

如果我没记错的话,这些 token 的有效期为 1 小时,如果您要将它们存储在某个地方,请注意这一点。我在本地测试过,我 t 大约需要 200~500 毫秒 - 每次 - 只获取 id token ,这在大多数情况下不是那么大的开销 - 但很重要。

关于flutter - 如何从 firebase_auth 获取 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56201378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com