【问题标题】:Updating authorization header in websocket graphql在 websocket graphql 中更新授权标头
【发布时间】:2018-04-10 01:39:18
【问题描述】:

我正在尝试使用 firebase 和 websockets 在 Graphql 中实现身份验证(在 react native 上)。

客户端使用 firebase 进行身份验证并获取令牌。然后它通过 websocket 客户端将令牌发送到服务器,该客户端使用 admin sdk 验证用户。

我面临两个问题:

  1. 当应用程序启动时,它会建立一个 ws 连接,到那时它还没有授权标头。用户在使用 firebase 一段时间后获得令牌。

  2. 令牌会在一段时间后过期,所以过一段时间我需要更新 websocket 连接中的授权标头,并重新运行因令牌过期而被拒绝的查询、变异或订阅。

有没有办法更新授权标头并重新运行查询?

我是否需要关闭之前的连接并使用授权标头中的新令牌打开一个新连接?这是怎么做到的?

我正在使用 apollo-server、apollo-client、apollo-link、subscriptions-transport-ws。

【问题讨论】:

标签: websocket graphql apollo apollo-server


【解决方案1】:

我之前没有遇到过您的确切问题,但您应该查看connectionParams 字段。如果在启动时创建了新的 websocket 客户端,您可以在 connectionParams 中异步获取新令牌。

import { createClient } from 'graphql-ws';

export const createWebsocketClient = (user) => createClient({
  url: 'ws://localhost:8080/v1/graphql',
  connectionParams: async () => {
    const token = await user.getToken();
    return {
      headers: {
        Authorization: `Bearer ${token}`,
      },
    };
  },
});

token只在初始化连接的时候发送,所以即使token在初始化后过期也应该没有问题。

【讨论】:

    猜你喜欢
    • 2021-03-04
    • 2021-06-04
    • 2020-02-22
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2020-11-13
    相关资源
    最近更新 更多