Firebase邮箱密码注册登录报No AppCheckProvider installed如何解决
Firebase邮箱密码注册登录后Storage 401未认证错误解决方案
问题背景
使用Firebase作为后端服务,通过邮箱密码方式实现用户注册登录功能,相关实现代码如下:
1. 用户注册代码
try{ await auth.createUserWithEmailAndPassword( email: email, password: password); }on FirebaseAuthException catch (e) { if (e.code == 'weak-password') { print('The password provided is too weak.'); } else if (e.code == 'email-already-in-use') { print('The account already exists for that email.'); } } catch (e) { print(e); }
2. 用户登录代码
try{ await auth.signInWithEmailAndPassword(email: email, password: password); }on FirebaseAuthException catch (e) { if (e.code == 'user-not-found') { print('No user found for that email.'); // showErrorDialogBox(context, 'No user found for that email.'); } else if (e.code == 'wrong-password') { // showErrorDialogBox(context, 'Wrong password provided for that user.'); print('Wrong password provided for that user.'); } }
报错信息
E/StorageException( 9609): StorageException has occurred. E/StorageException( 9609): User is not authenticated, please authenticate using Firebase Authentication and try again. E/StorageException( 9609): Code: -13020 HttpResult: 401 W/StorageUtil( 9609): Error getting App Check token; using placeholder token instead. Error: com.google.firebase.FirebaseException: No AppCheckProvider installed. W/NetworkRequest( 9609): no auth token for request
报错原因
- 时序问题:注册/登录为异步操作,在操作未完成前就发起Firebase Storage访问请求,此时用户尚未完成身份鉴权,Storage无法获取有效认证令牌,触发401未认证错误。
- App Check配置缺失:项目已开启Firebase App Check校验,但客户端未安装对应App Check Provider,导致App Check令牌获取失败,若Storage安全规则启用了App Check校验,也会触发权限拒绝。
- Storage安全规则限制:Firebase Storage默认安全规则通常要求用户处于认证状态才可读写资源,未登录状态或登录未完成时访问会触发权限错误。
修复方案
- 调整操作时序:注册/登录操作为异步方法,需等待
createUserWithEmailAndPassword、signInWithEmailAndPassword执行完成,且确认auth.currentUser不为空后,再发起Storage的读写请求。 - 修复App Check配置:若不需要使用App Check,可直接在Firebase控制台关闭Storage服务的App Check校验开关;若需保留App Check能力,在客户端Firebase初始化完成后添加App Check激活配置,Flutter端示例代码如下:
await FirebaseAppCheck.instance.activate( androidProvider: AndroidProvider.playIntegrity, appleProvider: AppleProvider.appAttest ); - 校验Storage安全规则:确认Storage安全规则符合业务访问逻辑,仅认证用户可访问的通用规则参考如下:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow read, write: if request.auth != null; } } } - 鉴权状态校验:可在注册/登录成功回调中打印当前用户uid,确认用户身份鉴权已生效后再执行后续操作。
内容的提问来源于stack exchange,提问作者Ali Yar Khan
相关产品推荐
相关产品推荐

