首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么标志在方法上使用得最好?

什么标志在方法上使用得最好?
EN

Stack Overflow用户
提问于 2022-05-24 04:28:01
回答 1查看 83关注 0票数 2

我们有一个应用程序(ios,android,web),用户通过用户名和密码登录。我们也使用谷歌防火墙,因为它的强大和易于集成。

用户名和密码,主要是属于的网站,我们正在收集数据。(举个例子--如果他们在没有应用程序的情况下使用网站,并且更改了密码,那么他就无法登录应用程序)

现在提到的网站主机给我们API访问权限,通过OpenId登录以获取API的访问令牌。因为我们是一个安全的风险,因为我们存储用户的密码!

对于API访问,我们实际上不需要存储用户的用户名和密码,因为它们无论如何都是多余的。但是,如果我们想要添加一个特性(例如,消息发送或进一步的数据存储),我们需要让用户登录到防火墙中。

到目前为止,我们使用的是用于(第一个)签名的以下代码段:

代码语言:javascript
运行
复制
 firebaseAuth.createUserWithEmailAndPassword(
          email: email, password: password);

对于已经在用户中注册的用户:

代码语言:javascript
运行
复制
 firebaseAuth.signInWithEmailAndPassword(
              email: email, password: password);

注意,类似的凭据也用于在API上登录。(因为用户已经注册)

我们如何使用上述信息登录防火墙,而不问两次密码和用户名(一次为我们,一次为API)?

我们已经试过:

代码语言:javascript
运行
复制
await firebaseAuth.signInWithCustomToken(token)

当然,对于来自OpenId的jwl令牌,它不能工作,因为令牌不包含uid引用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-27 11:39:22

溶液

创建一个Firebase函数,就像在火基云函数中描述的那样。

请注意,如果您想要创建定制令牌,云功能需要权限。关于initializeApp(.)

代码语言:javascript
运行
复制
admin.initializeApp({
     serviceAccountId: '{App_Name}@appspot.gserviceaccount.com',
 });

因此,必须选择正确的服务帐户,您还必须赋予他生成令牌的权限。(见=> 堆栈过流问题

然后,云函数看起来是这样的:

代码语言:javascript
运行
复制
export const functionName= functions.https.onRequest(async (request, response) => {

const id = request.query.id;
const passcode = request.query.passcode; // not really needed

// add other passcodes for different authentications
if (passcode == "{COMPARE SOMETHING}") {
    await admin.auth().createCustomToken(id).then((customToken) => {
        response.status(200).send({
            'id': id,
            'customToken': customToken
        });
    }).catch((error) => {
        response.status(500).send({
            'ErrorMessage': "No token could be generated",
            "Error": error
        });
    });
}
else {
    response.status(500).send({
        'ErrorMessage': "Passcode wrong"
    });
}
});

另一方面,我们在移动应用程序上有代码:

代码语言:javascript
运行
复制
  // Get JWT Token
  Map<String, dynamic> jwtpayload = 
   Jwt.parseJwt(response_decoded['id_token']); // use import 'package:jwt_decode/jwt_decode.dart';
  final queryParameters = {
    'id': jwtpayload ['sub'],
    'passcode': 'APassCode',
  };
  final uri = Uri.https('us-central1-{yourApp}.cloudfunctions.net',
      '/{functionName}', queryParameters);
  final cloud_function_api_call = await client.post(uri);
  var decoded_cloud_function_api_call =
      jsonDecode(cloud_function_api_call.body);

最后:

代码语言:javascript
运行
复制
      await firebaseAuth.signInWithCustomToken(
      decoded_cloud_function_api_call['customToken']);

我希望它能帮助其他面临类似问题的人。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72357214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档