首页 > 解决方案 > 如何使用我的 Firebase 身份验证来处理外部服务?

问题描述

好的,所以我使用 firebase 作为我的 iOS 应用程序的身份验证。现在我计划使用称为 connectyCube 的外部服务向我的应用程序添加视频通话。该服务有自己的身份验证系统,除非用户经过身份验证,否则我无法使用他们的服务。

我知道这在开发人员世界中很常见,我看到 OAuth 和 JWT 这个词被抛出,但我是一名新手开发人员,我想了解如何使用 firebase 并从外部服务验证用户。

这些是他们在我选择“我有自己的身份验证”选项时提出的问题:

  1. 您的终点网址是什么
  2. 是 GET 还是 POST
  3. 请求标头
  4. 请求参数
  5. 响应参数

我在哪里可以从 firebase 获得所有这些信息?任何帮助都会很棒

标签: firebasegoogle-cloud-firestorefirebase-authentication

解决方案


作为@Dharmaraj 答案的替代方案,您可以根据他们提供的代码示例为此使用HTTP 事件云函数

使用此方法,您可以创建/verifyUserTokenConnectyCube 使用的端点。

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";

admin.initializeApp();

export const verifyUserToken = functions.https.onRequest((req, res) => {
  const idToken = req.query.token;

  verifyUser(idToken)
    .then(
      (userData) => {
        res.status(200).json(userData)
      },
      (err) => {
        console.log("Token verification failed.", err.code || err.message);
        res.status(422).json({error: "User token is invalid"})
      }
    )
    .catch((err) => console.error("Unexpected crash", err));
});

async function verifyUser(token) {

  if (!token)
    throw new Error("token missing");

  // using `true` here to force token to be checked against the Firebase
  // Auth API rather than trusting its contents as-is
  const { uid, email } = await admin.auth().verifyIdToken(token, true);

  // pull the user's username from their user data
  // at /users/{userId}/username
  const username = (await admin.database().ref("users/" + uid + "/username")).val();

  // use user's actual email if available, otherwise fallback
  // to a userID based email
  const uEmail = email || uid + "@users.noreply.yourapp.com";

  // use user's username if available, otherwise fallback to
  // the email address above.
  const uLogin = username !== null ? username : uEmail; 

  return {
    uid,
    login: uLogin,
    email: uEmail,
    user: {id: uid, login: uLogin, email: uEmail}, // <- this part in particular is used by ConnectyCube
    users: [{uid, login: uLogin, email: uEmail}]
  };
}

部署后,您将使用以下设置:

环境 价值
接口网址: https://us-central1-PROJECT-ID.cloudfunctions.net/verifyUserToken
获取/发布 GET
请求参数: {"token": "#{login}"}
响应参数: {"uid": "#{user.id}", "email": #{user.email}, "login": "#{user.login}"}

推荐阅读