使用@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
相关产品推荐
相关产品推荐

