在 iPhone 上使用 Google 登录(本地 Metro 服务器 + 开发构建) - 第 5/7 部分:Expo Router 设置

发布: (2026年1月15日 GMT+8 09:52)
2 分钟阅读
原文: Dev.to

Source: Dev.to

快速回顾!

从第 1‑4 步,我们已经完成了:

设置路由

在此步骤中,我们使用 Expo Router “Protected” 路由(在 Expo Router SDK 53 之后可用)来保护受限页面。
根布局现在使用 ClerkProvider 包裹整个应用。

ClerkProvider 的根布局

// _layout.tsx
export default function RootLayout() {
  const publishableKey =
    process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY ??
    EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY;

  if (!publishableKey) {
    throw new Error(
      "Missing EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY. Set it in your .env (see Clerk Expo quickstart) or in env.ts."
    );
  }

  return (
    
      
    
  );
}

带受保护屏幕的导航

// _layout.tsx
function RootLayoutNav() {
  const { isLoaded, isSignedIn } = useAuth();
  const isLoggedIn = isLoaded && isSignedIn;

  return (
    
      {/* Only available when NOT logged in */}
      
        
      

      {/* Only available when logged in */}
      
        
      

      {/* Public screens */}
      
    
  );
}

必要的导入

// _layout.tsx
import { ClerkProvider, useAuth } from "@clerk/clerk-expo";
import { tokenCache } from "@clerk/clerk-expo/token-cache";
import { Stack } from "expo-router";
import { EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY } from "../env";

目录结构

(详细信息请参阅介绍。)

OAuth 原型应用目录结构

参考

有关 Expo Router 受保护路由的更多细节,请参阅:Expo Router – Protected routes

Back to Blog

相关文章

阅读更多 »

SC #11:任务组

TaskGroup 一个 TaskGroup 包含动态创建的子任务,可以串行或并发执行。只有当组完成时才被视为结束。

SC #10:解耦任务

一个脱耦的 Detached Task 以异步方式执行操作,脱离了包裹它的结构化并发上下文。不要继承这个 c...

SC #8:取消 Task

Swift 和 SwiftUI 中的 Task 取消 > 注意:在 Swift 中,取消 Task 并不保证执行会立即停止。每个 Task 必须检查更多…