You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js服务器中如何用Refresh Token配置Nhost客户端会话?

解决Nhost客户端在Node.js中使用Refresh Token认证的问题

问题核心原因

你的代码存在两个关键问题:

  1. Node.js环境缺少适配的会话存储:Nhost默认依赖浏览器的localStorage存储会话,但Node.js不存在该对象,导致认证上下文无法持久化,后续请求无法携带认证信息。
  2. 错误使用会话初始化方法:nhost.auth.client.start()是针对浏览器端的启动流程设计的,Node.js环境下应直接使用setSession来设置已有的会话。

修复后的完整代码

import { NhostClient } from '@nhost/nhost-js'

// Node.js环境下自定义内存存储,替代浏览器的localStorage
const nodeStorage = {
  storage: {},
  getItem: (key) => nodeStorage.storage[key] || null,
  setItem: (key, value) => { nodeStorage.storage[key] = value },
  removeItem: (key) => delete nodeStorage.storage[key]
}

const nhost = new NhostClient({
  region: 'myregion',
  subdomain: 'mysubdomain',
  auth: {
    clientStorage: nodeStorage // 配置自定义存储
  }
})

const refreshToken = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
const refreshSession = await nhost.auth.refreshSession(refreshToken)

// 直接设置会话,替代start方法
await nhost.auth.setSession(refreshSession.session)

// 传入完整有效的GraphQL查询语句
const myResponse = await nhost.graphql.request(`
  query MyTargetQuery {
    // 替换为你的实际查询内容
    exampleResource {
      id
      name
    }
  }
`)

console.log(myResponse)

关键修复点说明

  • 自定义存储实现:必须提供符合Storage接口的存储对象,Nhost的认证模块依赖它保存会话信息,否则后续请求无法自动携带认证头。
  • 使用setSession设置会话:这是Nhost官方推荐的初始化现有会话的方式,能正确完成认证上下文的初始化。
  • 规范GraphQL查询格式:确保传入graphql.request的是完整的GraphQL查询字符串,而非占位符,避免请求因语法错误失败。

内容的提问来源于stack exchange,提问作者Romel Pérez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:02:37