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

Angular+Capacitor Apple登录双SDK集成遇auth/missing-or-invalid-nonce错误

解决Angular+Capacitor集成Apple登录时的"auth/missing-or-invalid-nonce"错误

问题场景

基于Angular和Capacitor的应用,已通过@capacitor-firebase/authentication完成Apple登录,但集成@angular/fire Web SDK时触发错误:auth/missing-or-invalid-nonce。

错误原因

@capacitor-firebase/authentication发起Apple登录请求时会自动生成nonce,Apple返回的idToken中包含该nonce的哈希值。@angular/fire的OAuthProvider需要原始nonce验证idToken合法性,若传入的rawNonce与生成的原始值不匹配,就会触发该错误。

解决方案

直接使用Capacitor登录返回结果中credential字段的nonce作为rawNonce参数传入OAuthProvider.credential(),无需手动生成或填写任意值。

修正后的代码

import { OAuthProvider, signInWithCredential, getAuth } from '@angular/fire/auth';
import { FirebaseAuthentication } from '@capacitor-firebase/authentication';

AppleAuth() {
  // STEP 1: Capacitor Firebase 完成Apple登录
  FirebaseAuthentication.signInWithApple({}).then((result) => {
    if (result.credential?.idToken && result.credential.nonce) {
      // STEP 2: 使用Capacitor返回的原始nonce创建Angular Fire凭证
      const credential = new OAuthProvider('apple.com').credential({
        idToken: result.credential.idToken,
        rawNonce: result.credential.nonce, // 直接使用Capacitor返回的nonce
      });
      signInWithCredential(getAuth(), credential)
        .then((userCredential) => {
          // 登录成功逻辑
          console.log('Angular Fire登录成功:', userCredential);
        })
        .catch((error) => {
          console.error('登录错误:', error);
        });
    }
  });
}

验证说明

Capacitor返回的result.credential.nonce是原始随机字符串,idToken解码后的nonce是该字符串的SHA-256哈希值。Angular Fire会自动对传入的rawNonce进行哈希,与idToken中的值匹配后完成验证流程。

内容的提问来源于stack exchange,提问作者Mattias Gerle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:43:14