WebSocketClient如何在Apollo Client 3.0中传递身份验证令牌?

时间:2020-08-04 18:41:10

标签: authentication websocket graphql apollo-client graphql-subscriptions

通过Apollo GraphQL的官方文档,Apollo Client 3.0支持对其订阅的WebSocket身份验证。在许多情况下,应使用安全令牌对订阅进行身份验证。对我来说也是一样。我遵循了最新的Apollo Client(here)WebSocket身份验证文档。

文档:

enter image description here

我的代码:

import { WebSocketLink } from '@apollo/client/link/ws';

const wsLink = new WebSocketLink({
  uri: `${process.env.REACT_APP_WS_API}/graphql/`,
  options: {
    reconnect: true,
    connectionParams: {
      authToken: `${localStorage.getItem('access_token')}`
    }
  }
})

不幸的是,此身份验证根本不起作用。我的graphql_jwt.exceptions.PermissionDenied后端发生Django错误,后端未读取任何authToken值。我已经在下面附上了该异常的屏幕截图。

enter image description here

是否有有效的解决方案将安全令牌传递给WebSocketLink

1 个答案:

答案 0 :(得分:0)

如果后端希望通过标头获得令牌,则WebSocketLink可能不起作用,因为它通过WebSocketsee code)发送connectionParams作为消息的有效负载属性。为了使其正常工作,后端必须等待GQL_CONNECTION_INIT消息才能获取令牌。