我做了一些关于使用 Flutter 将 LINE 登录与 Firebase Auth 集成的研究和实验。我有一些问题:
貌似在Firebase Auth中,有
AuthProvider
,而在Flutter源代码中,我还发现了一个OAuthProvider
。您可以在此处创建Credential
以包含您的 idToken 和访问 token 。但我不知道如何在该Credential
中指定providerId
。我想这是不可能的,因为Firebase还没有集成LINE登录。客户端 api:logInWithCredential
只能使用 Firebase 支持的登录方法,并且您必须在 Firebase 控制台中启用它们。我说得对吗?所以看来现在我必须设置自己的服务器来将 LINE 访问 token 交换为 Firebase 自定义 token 。在我的服务器中,我首先验证访问 token 并获取 LINE 用户配置文件,然后创建一个自定义 token ,但我必须决定一个 UID,我必须使用一些模式,例如
LINE:${LINE_UID}
。这看起来像是黑客行为,有更好的方法吗?用于创建自定义 token 的管理 API 仅接受 UID 或可选的用户声明,我无法设置其显示名称或其他一些基本信息。因此,如果我直接将具有 UID(如
LINE:${LINE_UID}
)的 token 发送到客户端,那么客户端logInWithToken
会创建一个没有显示名称的用户(如果不这样做)不存在。我可以想象的唯一解决方法是,在服务器端生成LINE:${LINE_UID}
并在 Admin API 中查找它,如果它不存在,那么我使用以下命令创建一个用户正确的显示名称。这看起来又不太好,因为文档说如果你这样做logInWithToken
,如果它不存在,它会创建一个,我们不能使用它,因为我想在创建它时设置它的显示名称。还有更好的解决方案吗?我想将用户与多个身份验证提供商链接。我在 Firebase JWT 中看到,它们被很好地包含在内,这很酷。但这些链接的元素是通过凭据获取的用户配置文件。那么我们可以将用户链接到 LINE 登录吗?哪个不是内置的 Firebase Auth Provider?身份验证提供商链接仅对 Firebase 内置提供商有效吗?
问候, 翔。
最佳答案
您在一篇文章中提出的要求太多,这使得我们很难提供帮助。我将尝试在下面解决,但请遵循 How do I ask a good question 上的建议继续前进。
此博文中显示了将 LINE 添加为身份验证提供程序的一般方法:Authenticate your Firebase users with LINE Login 。还有一个example ,其中展示了如何使用 Cloud Functions 作为服务器组件。如果您在 Flutter 的实现中遇到困难,请发布 minimal, complete/standalone code that reproduces this issue .
- The client side api: logInWithCredential can ONLY work with Firebase supported login methods, and you have to enable them in your Firebase console. Am I right?
不,你错了。您还可以provide your own sign-in provider对于 Firebase,并使用您在 Firebase 身份验证 SDK 中创建的 token 。
- This looks like some hacking, is there a better way?
UID 可以是您想要的任何内容,但您必须确保它是唯一的。确保全局唯一性的一种常见方法是在 UID 中嵌入提供商的某些标识符。如果您更喜欢其他方式来确保全局唯一性,当然您也可以自由使用。
- I have no way to set its display name or some other basic info [when creating the account]
这确实是某些提供商的常见问题,例如,在创建帐户之后之前,您无法设置电子邮件+密码提供商的显示名称。通过自定义提供程序,您可以将所需的任何信息放入初始 JWT 中。
- can we link a user to a LINE login? Which is not built-in Firebase Auth Provider?
关于firebase - 如何将 LINE 登录集成到 Firebase Auth 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60449729/