Javascript Getstream.io“;“未经认证”;使用只读令牌
我正在使用django getstream.io客户端。我的后端代码如下所示,它生成一个只读令牌,并将其与成功登录时发送的jwt令牌一起存储在响应中。此代码位于my settings.py文件的底部,该文件包含STREAM\u API\u SECRET和STREAM\u API\u KEY设置。它们也在my settings.py中,与我的getstream.io仪表板中的内容相匹配Javascript Getstream.io“;“未经认证”;使用只读令牌,javascript,django,getstream-io,Javascript,Django,Getstream Io,我正在使用django getstream.io客户端。我的后端代码如下所示,它生成一个只读令牌,并将其与成功登录时发送的jwt令牌一起存储在响应中。此代码位于my settings.py文件的底部,该文件包含STREAM\u API\u SECRET和STREAM\u API\u KEY设置。它们也在my settings.py中,与我的getstream.io仪表板中的内容相匹配 from stream_django.client import stream_client def jwt_r
from stream_django.client import stream_client
def jwt_response_payload_handler(token, user=None, request=None):
user_feed_1 = stream_client.feed('user', str(user.id))
readonly_token = user_feed_1.get_readonly_token()
return {
'token': token,
'stream': str(readonly_token)
}
在前端,从包含流令牌的登录响应中正确获取令牌。它试图设置一个实时流,但当它连接时,我得到一个“未验证错误”。我已经确认,传递给以下客户端函数的令牌与上面生成的令牌匹配
function setupStream (token, id) {
var client = stream.connect(STREAM_API_KEY, null, STREAM_APP_ID)
var user1 = client.feed('user', id, token)
function callback (data) {
console.log(data)
}
function failCallback (data) {
alert('something went wrong, check the console logs')
console.log(data)
}
user1.subscribe(callback).then(() => {}, failCallback)
}
我不确定我做错了什么,因为据我所知,一切都设置正确。令牌和用户id与前端和后端的匹配
我遵循文档中的内容,但不起作用:
当我在console中尝试以下操作时:
user1.get({ limit: 5, offset: 0 })
.then(callback)
.catch(failCallback)
我从中得到的确切错误响应主体是:
{
"code": null,
"detail": "url signature missing or invalid",
"duration": "7ms",
"exception": "AuthenticationFailed",
"status_code": 403
}
编辑:
似乎通过改变:
获取\u readonly\u token()到.token,创建一个读/写令牌,客户端代码可以工作。只读令牌不起作用吗?结果是,我错误地解码了只读令牌。将后端代码更改为以下解决了我的问题
'stream': readonly_token.decode("utf-8")
感谢您的更新-这将有助于后续的其他人。实际上,今天在一个完全不同的应用程序上遇到了UTF-8编码问题,如图所示。即将发布的python客户端版本将立即解决此问题;)