模拟烧瓶单元测试的令牌 - firebase-admin-python SDK

6 python firebase firebase-authentication firebase-admin

我正在使用 firebase-admin-python SDK 来处理 iOS 应用程序和 Flask 后端 (python) 之间的身份验证。这是我的后端身份验证端点,遵循firebase 指南

from flask import request
from firebase_admin import auth


def get():
    """accessed via '/api/authtoken' """
    try:
        fir_token = request.headers["Authorization"]
        decoded_token = auth.verify_id_token(fir_token)
        fir_auth_id = decoded_token["uid"]
    except:
        ...

Run Code Online (Sandbox Code Playgroud)

如何模拟 fir_token 进行单元测试?我如何模拟auth.verify_id_token这样我就不需要实际连接到 firebase 服务器?

Hir*_*aka 4

将逻辑放在界面后面。

class TokenVerifier(object):
    def verify(self, token):
        raise NotImplementedError()


class FirebaseTokenVerifier(TokenVerifier):
    def verify(self, token):
        return auth.verify_id_token(token)


class MockTokenVerifier(TokenVerifier):
    def verify(self, token):
         # Return mock object that will help pass your tests.
         # Or raise an error to simulate token validation failures.
Run Code Online (Sandbox Code Playgroud)

然后确保在单元测试期间您的代码使用MockTokenVerifier.

还可以创建模拟 ID 令牌,并删除 Admin SDK 的部分内容,以便auth.verify_id_token()在测试期间正常运行(请参阅SDK 的单元测试)。但我更喜欢上面的解决方案,因为它更简单、更干净,并且不需要弄乱 SDK 的内部结构。