公司动态
Expo 社交登录快速上手:如何用 expo-auth-session 接入 16 个第三方平台
Expo 社交登录快速上手如何用 expo-auth-session 接入 16 个第三方平台【免费下载链接】expoAn open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.项目地址: https://gitcode.com/GitHub_Trending/ex/expo还在用邮箱 密码 验证码这套老组合劝退用户吗Expo 的expo-auth-session模块让你一行 Hook 就能接上 Google、Facebook、GitHub 等平台的社交登录一套代码同时覆盖 iOS、Android 和 Web几分钟就能跑通第一个登录按钮。接入收益一览维度传统表单注册Expo 社交登录用户操作步骤填邮箱 → 设密码 → 收验证码 → 确认点一下第三方头像 → 授权 → 完成你写的平台适配代码每平台一套原生流程同一套useAuthRequestHook安全细节自己实现 token 交换、防重放内置 PKCE 与自动 token 交换落地周期周级含各端联调小时级复制示例改配置第三方数据表明提供社交登录的应用注册转化率普遍有明显提升——核心原因不是技术而是少让用户做选择题。对开发者而言收益更直接Expo 仓库里的官方示例应用一次实现了 16 个平台的完整登录流程示例源码你只需照着抄作业。核心组件速查expo-auth-session建立在 OAuth 2.0 / OpenID Connect 之上你真正要记住的只有下面这几个 APIAPI作用一句话理解useAuthRequest创建认证请求、处理回调登录功能的总开关返回request、result、promptAsync三元组useAutoDiscovery自动发现服务端点把 OIDC 的 discovery 端点解析好省去手写authorizationEndpoint/tokenEndpointmakeRedirectUri生成跨平台一致的重定向 URI认证回跳地址的唯一可靠来源别手拼exchangeCodeAsync授权码换 token手动控制码交换流程时用maybeCompleteAuthSession冷启动时补全未完成的会话用户从外部浏览器回来后App 能接住回跳配套的还有开箱即用的 Provider 子模块providers 源码expo-auth-session/providers/google // Google含 Firebase 专用变体 expo-auth-session/providers/facebook // Facebook最短路径跑通按下面 5 步清单走Google 登录就能在你手机上点通安装依赖注意expo-crypto是 PKCE 的底层依赖别漏npx expo install expo-auth-session expo-web-browser expo-crypto在 Google 控制台创建 OAuth 客户端拿到clientId并把你生成的重定向 URI 加进已授权的重定向 URI。App 入口处调用一次maybeCompleteAuthSession()保证从浏览器回跳时能正确接收授权码。在组件里发起请求import { GoogleAuthSession } from expo-auth-session/providers/google; const [request, result, promptAsync] GoogleAuthSession.useAuthRequest( { clientId: 你的客户端ID, usePKCE: true, }, { path: redirect, preferLocalhost: true } );渲染按钮并监听结果if (request) { return Button title用 Google 登录 onPress{() promptAsync()} /; } if (result?.type success) { // result.authentication.accessToken 在这里 }完整可运行的版本在 AuthSessionScreen.tsx里面 16 个平台的差异全部集中在clientId、scopes和端点配置上其余逻辑一模一样——这是这个示例最有价值的地方。平台适配总览官方示例覆盖了 16 个服务按接入方式分三类平台接入方式关键差异Google / Google FirebaseProvider HookuseAuthRequest/useIdTokenAuthRequest最顺滑Firebase 变体直接回传id_tokenFacebookProvider Hook需走应用审核scopes命名与 OAuth 标准略有差异GitHub / Imgur / Spotify / Strava / Twitch / Dropbox / Reddit / Coinbase / Uber / FitBit / Slack通用useAuthRequest 手写端点Reddit、FitBit 每个 clientId 只允许一个回跳 URI需按环境区分Okta / Identity Server 4useAutoDiscoveryuseAuthRequest服务端点支持 OIDC discovery端点配置可以省掉Apple独立模块expo-apple-authentication不走 OAuth 浏览器流程仅 iOS/macOS支持 Face ID/Touch ID几个从示例源码里能直接读出来的适配要点回跳 URI 要按运行环境区分。示例中 Reddit、FitBit、GitHub 都按Expo Go 内 / Web / 原生裸机三档切换clientId因为部分平台一个应用只允许登记一个回跳地址。Web 端preferLocalhost: trueAndroid 上建议false示例里的写法是const redirectUri AuthSession.makeRedirectUri({ path: redirect, preferLocalhost: Platform.select({ android: false, default: true }), });部分平台对 PKCE 支持不完整示例中 Dropbox 在开启 PKCE 时直接禁用按钮接入冷门平台前先看对方文档。工程化与安全防护PKCE移动端 OAuth 的默认姿势。传统授权码流程中授权码在回跳 URL 里裸奔被截获就能换 token。PKCEProof Key for Code Exchange通过本地生成的随机密钥证明发起授权的和换 token 的是同一个 App。在expo-auth-session里它就是usePKCE: true一个开关官方示例默认开启建议你也保持开启除非目标平台明确不支持。多环境配置把敏感项挪出代码。开发和生产的clientId、回跳 URI 不同硬编码是最常见的事故源。推荐放进app.json的extra字段再通过expo-constants读取import Constants from expo-constants; const clientId Constants.expoConfig?.extra?.googleClientId;回跳 URI 永远用makeRedirectUri生成不要手拼字符串——它会保证 Expo Go、裸机应用、Web 三种形态下生成的地址与平台登记规则一致这也是 90% redirect_uri 不匹配报错的根治方法。故障排查清单Q认证完成后提示redirect_uri不匹配把makeRedirectUri的实际输出打印出来逐字符复制到第三方控制台的回跳 URI 列表。重点检查localhost与设备 IP、exp://前缀、末尾斜杠。Q用户点了取消后页面出现一条刺眼的报错取消不是错误是正常分支。参考 AuthResult.tsx 的状态映射对cancel/dismiss单独处理if (result?.type error result.error ! user_cancelled) { // 只有真正的失败才提示用户 }Q从外部浏览器授权后App 没能接住回跳确认两件事入口调过maybeCompleteAuthSession()Android 的MainActivity配置了singleTask启动模式和对应 intent-filterbare 工程配置说明。QWeb 端认证成功但页面空白或数据缺失Reddit 等平台的注释里写得很直白回跳 URI 的http/https协议写错时服务端会放行认证但回跳不带数据页面看起来就是坏的。检查 Web 端是否误用了localhost的http形式。Qrefresh token 不生效或行为怪异不同平台的刷新策略差异很大示例里 FitBit 就标注了刷新不返回新 token。生产环境建议把刷新逻辑放在你自己的后端而不是在 App 里持久化 refresh token。资源地图资源路径多平台认证示例16 个平台apps/native-component-list/src/screens/AuthSession/登录按钮与状态卡片组件AuthCard.tsx认证结果展示组件AuthResult.tsx核心模块源码packages/expo-auth-session/PKCE 实现packages/expo-auth-session/src/PKCE.tsGoogle / Facebook Providerpackages/expo-auth-session/src/providers/Apple 登录独立模块packages/expo-apple-authentication/模块 README含 bare 工程配置packages/expo-auth-session/README.md官方认证指南docs/pages/develop/authentication.mdx平台支持速查平台支持状态备注Google✅ 完整标准 OAuth Firebase 双变体Facebook✅ 完整需应用审核Apple✅ 完整独立模块仅 iOS/macOSGitHub / Spotify / Twitch / Slack 等 12 家✅ 完整通用 OAuth 端点配置Web 全端✅ 完整回跳协议需注意 http/https后续演进方向token 生命周期管理接入refresh_token自动刷新刷新逻辑收敛到后端多账户切换利用prompt: AuthSession.Prompt.SelectAccount提供切换入口示例的 Settings 区已内置开关认证状态持久化用expo-secure-store安全存储会话冷启动静默续登认证体验国际化useAuthRequest支持language参数示例中已提供英/波/荷/芬四语切换企业 SSO 扩展用useAutoDiscovery接入 Okta 等 OIDC 服务覆盖 B 端场景把 官方示例 拉进你的项目改一改今天就能让第三方登录出现在你的注册页上 【免费下载链接】expoAn open-source framework for making universal native apps with React. Expo runs on Android, iOS, and the web.项目地址: https://gitcode.com/GitHub_Trending/ex/expo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考