ESP32调用Firebase认证返回错误码400但后台显示登录成功如何解决
错误原因
- 认证参数赋值错误:你提供的代码中,邮箱和密码两个字段都被赋值为
email_name.c_str(),如果实际的账号密码不相同,会向Firebase服务器传递非法的认证参数,直接触发400错误码。 - 认证状态判断时机错误:该ESP32 Firebase客户端库的token生成是异步任务,调用
Firebase.begin()之后立刻同步调用Firebase.authenticated()判断状态时,鉴权流程还未完成,必然会返回未认证的结果。
解决方法
- 修正密码赋值逻辑,将密码字段替换为实际存储用户密码的变量:
// 错误写法 fb_auth.user.email = email_name.c_str(); fb_auth.user.password = email_name.c_str(); // 正确写法,user_password为存储用户密码的变量,请根据实际业务修改 fb_auth.user.email = email_name.c_str(); fb_auth.user.password = user_password.c_str();
- 调整认证状态判断逻辑,不要在初始化后立刻判断状态,优先使用库提供的token状态回调函数接收认证结果,示例回调实现:
void tokenStatusCallback(TokenInfo info) { // token生成完成,认证成功 if (info.status == token_status_ready) { Serial.println("已完成认证"); } // 认证失败 else if (info.status == token_status_error) { Serial.printf("认证失败,错误码:%d,错误信息:%s\n", info.error.code, info.error.message.c_str()); } }
- 如果需要主动触发登录/注册操作并直接获取结果,可以显式调用库提供的
signIn/signUp方法:
// 主动调用登录接口并判断结果 if (Firebase.signIn(&fb_auth)) { Serial.println("登录成功"); } else { Serial.printf("登录失败原因:%s\n", Firebase.errorReason().c_str()); }
内容的提问来源于stack exchange,提问作者Jakub Szlaur
相关产品推荐
相关产品推荐

