使用 GetStream.io 和 firebase 的正确用户创建流程?

Posted

技术标签:

【中文标题】使用 GetStream.io 和 firebase 的正确用户创建流程?【英文标题】:proper user creation flow with GetStream.io and firebase? 【发布时间】:2020-02-27 04:33:05 【问题描述】:

我是 getStream.io 的新手,我正在尝试使用 getstream.io 和 firebase 了解用户创建流程。如果我在 firebase 中创建一个新用户,然后将他们的 firebase UID 传递给以下函数:

client = stream.connect('YOUR_API_KEY', 'API_KEY_SECRET');

//generate new user
client.user('<FIREBASE UID>').create(name: "Jane Doe", occupation: "Software Engineer", gender: 'female');

//generate token for the user
const userToken = client.createUserToken('<FIREBASE UID>');

//Allow user to follow a feed
timeline_feed_1.follow('user', '<FIREBASE UID>');

//Check followers for the user
<FIREBASE UID>.followers(limit: '10', offset: '10');

这行得通吗?还是我做错了?

感谢您的阅读!

P.S 我看过 Users auth and profiles in getstream.io,只是想澄清一下,我的 firebase 示例是“Stream 最好与应用程序结合使用”的意思

【问题讨论】:

【参考方案1】:

我实现了一个 Firebase + GetStream.io 用户创建流程,可以分享我所做的。

大图:创建 Firebase UID 后,您必须使用自己的后端服务器连接 Stream API 以创建新用户(使用 Firebase UID 作为 user_id)并生成该用户的 JSON Web Token(“JWT ”)。然后,您的后端服务器将此 JWT 传递给您的前端客户端(在我的情况下为 Swift ios),然后使用此 JWT 允许用户连接到 Stream API 并访问他的授权提要等。我使用 Python 运行时 Google Cloud Functions一个 HTTP 触发器作为我的“后端服务器”。我的 Swift 代码通过 HTTP POST 请求调用这些函数。

这是我创建 Stream 用户的 Python 代码,替换您自己的 API 密钥和密码:

import stream
from flask import escape

def createStreamUser(request):  
    content_type = request.headers['content-type']
    if content_type == 'application/json':
        request_json = request.get_json(silent=True)

        try:
            id = request_json['id']
            name = request_json['data']['name']
            avatarURL = request_json['data']['avatarURL']
        except:
            raise ValueError("JSON is invalid, or missing a 'name' property")

    client = stream.connect('YOUR_API_KEY', 'API_KEY_SECRET', location='us-east')

    userInfo = client.users.add(
        id, 
        "name": name,
        get_or_create=True,
    )

    return

这是一个生成 JWT 并将其返回给前端客户端的函数:

import stream
from flask import escape

def createUserToken(request):
    content_type = request.headers['content-type']
    if content_type == 'application/json':
        request_json = request.get_json(silent=True)

        try:
            id = request_json['id']
            name = request_json['data']['name']
        except:
            raise ValueError("JSON is invalid, or missing a 'name' property")

    client = stream.connect('YOUR_API_KEY', 'API_KEY_SECRET', location='us-east')

    user_token = client.create_user_token(id)

    return(user_token)

【讨论】:

感谢您的意见!我是 App dev 的新手,这对我很有帮助! 我遇到了一个新问题! ***.com/questions/58866120/…【参考方案2】:

在您引用的答案中,Stream is best used in combination with an application 似乎是关于在服务器上使用 Stream API 并在那里对用户进行身份验证,然后在成功身份验证后为您的前端代码提供用户令牌。

使用用户令牌初始化的 Stream API 客户端在哪些提要可访问或可写方面受到限制。

不建议在您的前端代码中放置 API 机密,因为如果有人从您的应用中提取这些数据,可能会导致未经授权访问其他用户的数据。

【讨论】:

以上是关于使用 GetStream.io 和 firebase 的正确用户创建流程?的主要内容,如果未能解决你的问题,请参考以下文章

getstream.io 获取 CORS 请求被拒绝:https://api.stream-io-api.com/api/v1.0/feed/user

Stripe 和 Firebase:FirebaseError:collection() 的第一个参数应为 CollectionReference、DocumentReference 或 Fireba

Uncaught FirebaseError: Firebase: No Firebase App '[DEFAULT]' has been created - 在 vue.js 中调用 Fireba

我该如何解决这个问题:Android Studio - Flutter - Dart - firebase [关闭]

FirebaseAuthUserCollisionException?

使用 Cocoapods 时找不到 FMDB 库