通过Apollo GraphQL的官方文档,Apollo Client 3.0支持对其订阅的WebSocket身份验证。在许多情况下,应使用安全令牌对订阅进行身份验证。对我来说也是一样。我遵循了最新的Apollo Client(here)WebSocket身份验证文档。
文档:
我的代码:
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
值。我已经在下面附上了该异常的屏幕截图。
是否有有效的解决方案将安全令牌传递给WebSocketLink
?
答案 0 :(得分:0)
如果后端希望通过标头获得令牌,则WebSocketLink
可能不起作用,因为它通过WebSocket
(see code)发送connectionParams作为消息的有效负载属性。为了使其正常工作,后端必须等待GQL_CONNECTION_INIT消息才能获取令牌。