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

Expo集成react-native-msal初始化AAD B2C时遇类型错误

问题描述

我正在使用Expo 4.5.2和react-native-msal 4.0.0,已从react-native-msal示例目录的b2cClient.ts中复制B2CClient类,初始化配置与示例的App.tsx一致。我的配置如下:

auth: {
  clientId: '<CLIENT_ID>',
  authorityBase: 'https://example.b2clogin.com/tfp/example.onmicrosoft.com',
  policies: {
    signInSignUp: 'B2C_1_mySignupPolicy',
    passwordReset: 'B2C_1_myPasswordResetPolicy',
  },
  redirectUri: Platform.select({
    android: 'msauth://com.company.app/l5rSw0yVmvlj7l5rSw0yWAYk5tfVb2j%2F',
    default: undefined,
  }),
},

我已完成Expo的额外配置步骤,但编辑器提示警告:Failed to resolve plugin for module "react-native-msal"(使用的版本与示例一致)。虽然仍能构建应用,但运行b2cClient.init()时出现错误:
[TypeError: null is not an object (evaluating '_nativeModule.default.createPublicClientApplication')]
该包本应支持Expo且配置与示例一致,请问如何解决?

解决方案
  1. 完成Expo预构建
    react-native-msal依赖原生模块,Expo裸工作流必须完成预构建才能正确集成。执行命令:

    expo prebuild --clean
    

    预构建完成后重新启动项目,确保原生模块被正确注入。

  2. 检查Expo配置文件
    确认app.json或app.config.js中已正确添加react-native-msal插件配置,示例如下:

    {
      "expo": {
        "plugins": [
          [
            "react-native-msal",
            {
              "clientId": "<你的CLIENT_ID>",
              "android": {
                "redirectUri": "msauth://com.company.app/l5rSw0yVmvlj7l5rSw0yWAYk5tfVb2j%2F"
              }
            }
          ]
        ]
      }
    }
    

    替换为你实际的clientId和redirectUri后,重新执行预构建。

  3. 验证Android原生配置
    打开android/app/src/main/AndroidManifest.xml,检查是否已添加MSAL的intent-filter,注意path中的%2F要替换为实际的/:

    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data
        android:scheme="msauth"
        android:host="com.company.app"
        android:path="/l5rSw0yVmvlj7l5rSw0yWAYk5tfVb2j/" />
    </intent-filter>
    
  4. 清除缓存并重装依赖

    • 删除node_modules和package-lock.json/yarn.lock文件
    • 执行npm install或yarn install重装依赖
    • 清除Expo缓存并重启项目:expo r -c
  5. 确认版本兼容性
    Expo 4.5.2对应React Native 0.68.x版本,检查react-native-msal 4.0.0是否支持该RN版本。若存在兼容性问题,尝试调整包版本至匹配范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:05:23