Getstream.io“未经过身份验证”,只读令牌

时间:2016-05-06 16:05:04

标签: javascript django getstream-io

我正在使用django getstream.io客户端。我的后端代码如下所示,它生成一个只读令牌,并将其存储在响应中,并使用成功登录时发送的jwt令牌。此代码位于settings.py文件的底部,该文件包含STREAM_API_SECRET和STREAM_API_KEY键设置。这些也在我的settings.py中,并与我的getstream.io仪表板中的内容相匹配。

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匹配前端和后端的内容。

我正在关注文档中的内容,但它不起作用: https://getstream.io/docs/#readonly-tokens

当我在控制台中尝试以下内容时:

  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
}

编辑:

似乎通过改变: get_readonly_token()到.token,创建一个读/写令牌,客户端代码工作。 readonly令牌不起作用吗?

1 个答案:

答案 0 :(得分:2)

事实证明,我正在错误地解码read_only令牌。将后端代码更改为以下内容解决了我的问题;

 'stream': readonly_token.decode("utf-8")