Mysql OAuth(Facebook、Twitter)和基本登录用户表

Mysql OAuth(Facebook、Twitter)和基本登录用户表,mysql,facebook,twitter,login,oauth,Mysql,Facebook,Twitter,Login,Oauth,我想让用户使用他们的Facebook或Twitter帐户登录我的网站,但如果他们没有,那么就注册一个新帐户,并使用我网站的基本登录 但是我的用户表应该是什么样子的: 我的想法是: id(主,自动递增) 用户名(如果是oauth登录=>ouath_提供程序+oauth_id,例如:fb_100001557958700) 密码(用户选择的密码或oauth随机生成的密码) 名称(要显示的名称) 你觉得怎么样? 或者我应该有两个表,一个用于基本登录,另一个用于oauth登录?但用户如何拥有唯一的ID

我想让用户使用他们的Facebook或Twitter帐户登录我的网站,但如果他们没有,那么就注册一个新帐户,并使用我网站的基本登录

但是我的用户表应该是什么样子的:

我的想法是:

  • id(主,自动递增)
  • 用户名(如果是oauth登录=>ouath_提供程序+oauth_id,例如:fb_100001557958700)
  • 密码(用户选择的密码或oauth随机生成的密码)
  • 名称(要显示的名称)
你觉得怎么样? 或者我应该有两个表,一个用于基本登录,另一个用于oauth登录?但用户如何拥有唯一的ID呢


提前感谢您的评论。

这就是我的用户表的外观

  • 用户id(主,自动递增)
  • oauth_提供商(enum(无、twitter、facebook))
  • 非统组织
  • 用户名
  • 密码
每次用户通过Facebook/Twitter注册时,都会插入一个新条目,其中密码记录当然为null


我认为这是一个很好的方法,因为您有一个唯一的用户id,可以在整个应用程序/数据库中使用。

根据我的经验,您最好将授权存储在一个表中,将用户数据存储在另一个表中

授权:

network     - Varchar(255)  #Twitter/Facebook/Openid/whatever
network_id  - varchar(255)  #Users id for that social network.
user_id     - int
用户:

id (primary, auto increment)
name
password
username

通过这种结构,如果您希望在将来某个时候允许同一用户同时登录Twitter和Facebook,这也是可能的。

谢谢dandoen。在Facebook/Twitter注册的情况下,用户名称是什么?它是空的吗?不,当用户注册facebook/twitter时,他们可能已经在那里有了用户名。对于facebook,这是用户名字段,对于Twitter,这是屏幕名称字段。@dandoen但这里的问题是只有“本地”帐户有密码,通过Twitter创建的帐户没有密码。这会导致数据库中的密码字段为空,这会导致潜在的黑客攻击,因为username&&password==“”(这需要一个非常强大的代码体系结构)如果密码字段设置为空怎么办?SQL的
null=null
比较返回
false
,所以我认为这不会有问题?在OAuth的情况下,用户的用户名和密码是什么?它是空的,还是生成的,或者用户每次都必须选择用户名和密码?理想情况下,您应该让用户注册用户名(可以从oauth提供程序自动填充)和密码。如果用户被锁定在他们的twitter或facebook帐户之外,这会给你一个退路。对不起@Gazler,但是“user_id”字段呢?在这种情况下,它代表什么?我的意思是,它是用户表的外键吗?@Atieh这是一个旧答案,但是的-它将引用用户的标识符。它可以是同一数据库中的外键(在本例中为),但也可以是对另一数据库中UUID的引用。需要注意的重要一点是,这是您对用户的引用,而不是来自OAuth提供者的引用。