php-具有多个社交登录/注册数据库结构的统一用户帐户
作者:互联网
我正在创建一个网站,用户可以在其中通过facebook,twitter,linkedin,google plus和常规表单过程进行登录/注册.
到目前为止,我的数据库结构是
**users_table**
id - username - password_hash - email - auth_key -date_created - last_login
**user_profile**
id - user_id (foreign_key) - first_name - last_name - gender - phone - photo
**facebook_users**
id - facebook_id - profile_link - user_id (foreign_key)
**linkedin_users**
id - linkedin_id - profile_link - user_id (foreign_key)
**have_social_account**
facebook(tinyint)[0-1] - twitter(tinyint)[0-1] - linkedin(tinyint)[0-1] - google(tinyint)[0-1]
现在,例如,当用户使用他的facebook登录时,正在使用附加信息在users表和user_profile上为他创建新记录,并且我将auth密钥和配置文件链接插入facebook_users(因为它是facebook登录),最后我插入了在have_social_account中的新记录,值在Facebook下为(1).
但是如果同一用户尝试使用其linkedin帐户登录;新记录将使用新的user_id创建,因此这就是为什么我无法统一该用户帐户的原因.如果电子邮件相同,我可以处理,但是如果用户为每个社交帐户使用不同的电子邮件地址,该怎么办.
有人可以为我提供最佳的结构吗?
提前致谢
解决方法:
如果用户在不同的身份验证提供程序中使用不同的电子邮件地址,我认为您将无能为力.您需要一些可以依靠的东西,以确保所有主要参与者都能为您提供独特性,并且IMHO电子邮件的质量与它差不多.
话虽如此,我认为您不需要那么多表.您的users和user_profiles表很好,但除此之外,为什么不只有一个表来存储不同的提供者帐户呢?
provider_accounts
-----------------
id
user_id
type (enum of 'Facebook', 'Linked In')
profile_link
使用这种结构,您可以轻松获取单个用户的所有提供商帐户,并确定给定的电子邮件是否已经具有给定提供商类型的特定帐户.
如果用户提出要求,或者以其他方式确定两个帐户实际上是同一用户,则可以通过使用某种实用程序来“合并”两个帐户来缓解这种情况.
标签:facebook-login,mysql,php,database,facebook-graph-api 来源: https://codeday.me/bug/20191121/2052444.html