Facebook认证登录时如何检测使用手机号注册的用户是否已存在?
手机号绑定Facebook账号的存在性检测方案
你当前逻辑失效的原因是:申请的登录权限仅包含public_profile和email,如果用户使用手机号注册Facebook且未绑定邮箱,调用getUserData返回的结果中email字段会为空,你原有的用邮箱匹配账号的逻辑自然无法生效。
最优解决思路
不管用户是用邮箱还是手机号绑定的Facebook账号,返回的userData中一定会携带全局唯一且永久不变的id字段(Facebook为每个用户分配的唯一身份标识),使用该字段做账号匹配是最可靠的方案,无需额外申请高风险权限。
具体改造步骤
- 你的后端用户表新增
facebook_user_id字段,用来存储对应Facebook用户的唯一ID - 原有登录校验逻辑调整:
- 拿到
userData后,优先用userData['id']去用户表查询是否存在匹配记录,存在则直接校验通过跳转主屏幕 - 若不存在匹配记录,再判断
userData中是否存在email字段:- 存在
email:查询是否有同邮箱的已注册账号,可做账号绑定或直接创建新账号,同时写入facebook_user_id - 不存在
email:说明是手机号注册的Facebook账号,引导用户补填注册所需的邮箱/手机号信息,完成注册后将facebook_user_id与新账号绑定存入表中
- 存在
- 拿到
调整后的代码参考
FacebookAuth.instance.login( permissions: ["public_profile", "email"] ).then((value) { FacebookAuth.instance.getUserData().then((userData) async { // 新增校验逻辑:调用你的后端接口用facebook用户id查账号是否存在 bool accountExists = await checkAccountByFbId(userData['id']); if(accountExists) { setState(() { _isLoggedIn = true; _fBauthentication.Userobject=userData; }); // 跳转主屏幕 return; } // 账号不存在的后续注册逻辑 handleNewUserRegistration(userData); }); });
注意:不要尝试申请Facebook的用户手机号权限,该权限属于高级审核权限,普通应用很难通过审核,用自带的用户ID做匹配完全可以满足需求,且合规性更高。
内容的提问来源于stack exchange,提问作者ciwaan keyga
相关产品推荐
相关产品推荐

