Firebase集成LINE登录遇invalid-credential错误求助
问题概述
通过以下代码实现LINE登录集成Firebase:
Future<UserCredential?> signIn() async { try { final result = await LineSDK.instance.login(scopes: ["profile", "openid", "email"]); final oauthCredential = OAuthProvider("LINE").credential( accessToken: result.accessToken.idTokenRaw, signInMethod: 'LINE'); return await FirebaseAuth.instance.signInWithCredential(oauthCredential); } catch (e) { return null; } }
执行return await FirebaseAuth.instance.signInWithCredential(oauthCredential);时抛出异常:
[firebase_auth/invalid-credential] The supplied auth credential is malformed, has expired or is not currently supported.
同时日志提示:
[connection] nw_connection_copy_metadata_block_invoke [C54] Client called nw_connection_copy_metadata on unconnected nw_connection Support for an auth provider with identifier 'LINE' is not implemented.
已在Firebase控制台开启LINE登录提供商,依赖版本:
firebase_auth: ^4.13.0 flutter_line_sdk: ^2.3.5
解决方案
1. 修正OAuth Provider标识符
Firebase对LINE的官方提供商标识符为line.com,而非"LINE"。修改凭证创建代码:
final oauthCredential = OAuthProvider("line.com").credential( accessToken: result.accessToken.idTokenRaw, idToken: result.accessToken.idTokenRaw, signInMethod: 'line.com' );
Firebase的第三方登录提供商采用标准化域名格式,错误的标识符会导致平台无法识别登录渠道,触发"未实现"的错误。
2. 正确传递Token参数
LINE SDK返回的idTokenRaw是OpenID Connect的身份令牌,需要同时作为idToken和accessToken参数传入credential。Firebase验证LINE凭证时依赖ID Token确认用户身份,仅传入accessToken会导致凭证格式不合法。
3. 核对Firebase与LINE平台的配置
- 确认Firebase控制台LINE提供商的Channel ID和Channel Secret与LINE Developers平台的应用信息完全一致。
- 检查LINE开发者平台的Callback URL是否设置为Firebase提供的默认地址:
https://<你的项目ID>.firebaseapp.com/__/auth/handler。 - 确保LINE应用已开启OpenID Connect功能(在LINE开发者平台的"Login"设置页启用)。
4. 验证依赖版本兼容性
尝试更新到最新稳定版依赖,避免版本适配问题:
firebase_auth: ^4.14.0 flutter_line_sdk: ^2.4.0
执行flutter pub get更新依赖,清除项目缓存后重新运行。
内容的提问来源于stack exchange,提问作者Nguyễn Đức Thành

