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

使用@clerk/clerk-expo SDK调用user.update()时提示first_name参数无效

使用@clerk/clerk-expo更新用户firstName时遇参数无效错误

问题代码

const { user } = useUser();

const [firstName, setFirstName] = useState(user?.firstName ? user.firstName : "");

const onUpdatePress = async () => {
  try {
    await user?.update({ firstName: firstName });
  } catch (err: any) {
    setErrorMessage(err.errors[0].longMessage);
    console.error(JSON.stringify(err, null, 2));
  }
};

报错信息

ERROR  {
  "status": 422,
  "clerkError": true,
  "errors": [
    {
      "code": "form_param_unknown",
      "message": "is unknown",
      "longMessage": "first_name is not a valid parameter for this request.",
      "meta": {
        "paramName": "first_name"
      }
    }
  ]
}

使用的依赖版本

  • react: 18.2.0
  • react-native: 0.71.6
  • expo: ~48.0.11
  • @clerk/clerk-expo: ^0.18.16

解决方案

这不是SDK的Bug,是使用方式有误。在@clerk/clerk-expo v0.18.16版本中,更新用户个人资料字段(如firstName)需要调用user.updateProfile()方法,而非user.update()——后者主要用于更新用户认证相关属性,不支持修改个人资料类字段。

修正后的代码如下:

const { user } = useUser();

const [firstName, setFirstName] = useState(user?.firstName || "");

const onUpdatePress = async () => {
  try {
    await user?.updateProfile({ firstName: firstName });
  } catch (err: any) {
    setErrorMessage(err.errors[0].longMessage);
    console.error(JSON.stringify(err, null, 2));
  }
};

如果调整后仍有问题,可以尝试将参数改为下划线命名格式first_name: firstName,部分早期版本的Clerk SDK对字段命名格式有要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 10:51:19