使用 Cloud Functions 实现用户注册和认证,无需 Firebase

587次阅读
没有评论

问题描述

在使用 Google Cloud Platform 创建 Cloud Functions 时,希望能够实现用户的注册和认证,但是希望在这个过程中不使用 Firebase。虽然使用 Firebase 创建和认证新用户非常简单,但是在直接使用 Google Cloud Platform 创建 Cloud Functions 时,用户希望通过自己的函数实现用户的注册、登录以及在函数内部调用时读取用户 ID,以满足不同的需求(比如付费用户等)。然而,目前关于这方面的文档相对较少,不够清晰明了,而且很难找到一种简单地在 Cloud Functions 中实现以下功能的 API:

  1. 注册新用户。
  2. 用户登录。
  3. 在用户通过 HTTPS 请求调用函数时读取用户 ID。

在不使用 Firebase 的情况下,该如何实现这些功能?用户是否应该为了简单起见使用 Firebase?但是在 Google Cloud Platform 上使用 Cloud Functions 并且同时使用 Firebase 来管理用户似乎并不合适,因为用户需要检查谁是付费用户等特定需求。

解决方案

请注意以下操作可能涉及版本差异或安全风险,请在操作之前做好备份并谨慎执行。

使用 Google Cloud Platform 实现用户注册和认证

在 Google Cloud Platform 上创建 Cloud Functions 来实现用户的注册和认证是完全可行的,尽管在文档中可能没有直接提供完整的示例。下面是一个基本的解决方案,可以帮助你实现这些功能。

1. 注册新用户

要实现用户的注册,你可以创建一个 HTTP 触发的 Cloud Function,接受 POST 请求,并从请求中获取用户提供的注册信息,比如用户名、密码等。然后,你可以在函数内部将用户信息存储到一个数据库中,比如 Google Cloud Datastore 或者 Google Cloud Firestore。

以下是一个简化的示例代码,用于在 Cloud Functions 中注册新用户:

const { Datastore } = require('@google-cloud/datastore');
const datastore = new Datastore();

exports.registerUser = async (req, res) => {
  const { username, password } = req.body;

  // 在此处将用户名和密码存储到数据库中,这里使用 Datastore 作为示例
  const userKey = datastore.key(['User']);
  const user = {
    key: userKey,
    data: {
      username,
      password,
    },
  };

  await datastore.save(user);

  return res.status(200).send('User registered successfully.');
};

2. 用户登录

要实现用户的登录,你可以创建另一个 HTTP 触发的 Cloud Function,接受 POST 请求,从请求中获取用户提供的登录信息,比如用户名和密码。然后,你可以在函数内部验证用户信息,并根据验证结果返回适当的响应。

以下是一个简化的示例代码,用于在 Cloud Functions 中实现用户登录:

exports.loginUser = async (req, res) => {
  const { username, password } = req.body;

  // 在此处验证用户名和密码,然后返回适当的响应
  if (isValidUser(username, password)) {
    return res.status(200).send('Login successful.');
  } else {
    return res.status(401).send('Invalid username or password.');
  }
};

function isValidUser(username, password) {
  // 在此处添加验证逻辑,检查用户名和密码是否有效
  // 返回 true 或 false
}

3. 在函数内读取用户 ID

要在用户通过 HTTPS 请求调用函数时读取用户 ID,你可以在请求的 header 或 URL 参数中包含用户 ID,或者在用户登录后将用户 ID 存储在函数的上下文中。这样,在函数内部就可以访问用户 ID。

总结

尽管 Google Cloud Platform 的文档可能对直接使用 Cloud Functions 实现用户注册和认证的示例有所欠缺,但实际上是可以实现的。通过创建适当的 HTTP 触发函数,处理用户的注册和登录,并在函数内部验证和存储用户信息,你可以实现自定义的用户管理系统,而无需依赖 Firebase。

然而,在设计和实现这样的功能时,请务必考虑安全性、数据保护和用户隐私等方面的因素。确保适当的身份验证和授权机制,并采取适当的安全措施,以保护用户的敏感信息和系统的安全性。

正文完