Apollo Client 3.0 中的 WebSocketClient 如何传递认证令牌?
Posted
技术标签:
【中文标题】Apollo Client 3.0 中的 WebSocketClient 如何传递认证令牌?【英文标题】:How does WebSocketClient pass authentication token in Apollo Client 3.0? 【发布时间】:2020-11-24 22:08:53 【问题描述】:根据 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
?
【问题讨论】:
【参考方案1】:如果后端期望通过标头获取令牌,WebSocketLink
可能不起作用,因为它通过WebSocket
(see code) 将 connectionParams 作为消息的有效负载属性发送。为了让它工作,后端必须等待 GQL_CONNECTION_INIT 消息来获取令牌。
【讨论】:
以上是关于Apollo Client 3.0 中的 WebSocketClient 如何传递认证令牌?的主要内容,如果未能解决你的问题,请参考以下文章
Apollo Client 3.0 或 Redux 用于本地状态管理?
在第 7 行调用 C:\wamp\www\Webs\client.php 中未定义的函数 sqlsrv_connect()
nodejs/vanilla 中的 Apollo-client 未触发订阅
next.js 中的 apollo-client 与 `next-with-apollo` VS next.js 文档常见问题解答中显示的方法(不使用 `getDataFromTree`)