00 / 00

登录与 API

在 Expo 中使用 Better Auth、SecureStore、oRPC 和 TanStack Query

移动端登录用 Better Auth 的 Expo 集成。服务端还是 products/01mvp/apps/web 承载,移动端只管发登录请求、存 cookie、请求 oRPC 时带上 cookie。

服务端入口

Better Auth 配置在:

products/01mvp/packages/auth/src/index.ts

移动端要求服务端有:

  • @better-auth/expo server plugin
  • NATIVE_APP_SCHEME 加入 trusted origins
  • AUTH_COOKIE_PREFIX 跟移动端公开变量对得上

移动端 auth client

移动端 client 在:

products/01mvp/apps/mobile/src/lib/auth-client.ts

它使用:

  • @better-auth/expo/client
  • expo-secure-store
  • EXPO_PUBLIC_APP_SCHEME
  • EXPO_PUBLIC_AUTH_COOKIE_PREFIX

登录后,Better Auth 会把 session cookie 存到 SecureStore。

移动端 oRPC client

移动端 API client 在:

products/01mvp/packages/api/src/client/mobile/orpc.ts

App 使用:

import { orpc } from "@/lib/mobile-api";

const healthQuery = useQuery(orpc.health.live.queryOptions());
const profileQuery = useQuery(orpc.account.profile.queryOptions());

这个入口和 Web 的 TanStack Start client 是分开的,避免 Expo 打包进 Start 的 server request forwarding 逻辑。

模板里已有的 API 调用

首页已经包含三种请求:

  • health.live:公开 API,看看 server 是不是通的
  • billing.plans:公开 API,拿到可购买的计划列表
  • account.profile:受保护 API,验证登录 cookie 能被 oRPC 正确读取

常见问题

登录成功但受保护 API 还是返回 401

查这几项:

  • EXPO_PUBLIC_SERVER_URL 是不是指向同一个 Web/API 服务
  • EXPO_PUBLIC_AUTH_COOKIE_PREFIX 是不是和服务端 AUTH_COOKIE_PREFIX 一样
  • 服务端是不是部署了最新的 NATIVE_APP_SCHEME
  • 真机跑的时候,server URL 是不是设备能访问到的地址

OAuth 回调不回 App

查这些:

  • app.jsonexpo.scheme
  • EXPO_PUBLIC_APP_SCHEME
  • 服务端 NATIVE_APP_SCHEME
  • OAuth 后台的回调 URL 是不是指向 {EXPO_PUBLIC_SERVER_URL}/auth/callback/<provider>

这篇文档有问题?