数据库
首页 > 数据库> > php-具有多个社交登录/注册数据库结构的统一用户帐户

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