在我的应用程序中,我有一个"用户"表,具有以下结构.
CREATE TABLE IF NOT EXISTS `users` (
`userId` int(10) unsigned NOT NULL auto_increment,
`username` varchar(128) NOT NULL default '',
`password` varchar(32) NOT NULL default '',
`email` text NOT NULL,
`newsletter` tinyint(1) NOT NULL default '0',
`banned` enum('yes','no') NOT NULL default 'no',
`admin` enum('yes','no') NOT NULL default 'no',
`signup_ip` varchar(20) NOT NULL default '',
`activation_key` varchar(60) NOT NULL default '',
`resetpassword_key` varchar(60) NOT NULL default '',
`createdon` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`userId`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;
Run Code Online (Sandbox Code Playgroud)
我想在我的应用程序中通过facebook,twitter和openid实现社交登录,就像StatckOverflow一样.请建议我在我的数据库中需要的所有更改以及如何在PHP中实现逻辑,以及现有的登录工具.
谢谢!
Kla*_*sen 32
我建议你介绍一个概念AuthenticationProvider
:
CREATE TABLE IF NOT EXISTS `AuthenticationProvider` (
`ProviderKey` varchar(128) NOT NULL,
`userId` int(10) unsigned NOT NULL,
`ProviderType` enum('facebook','twitter', 'google') NOT NULL,
PRIMARY KEY (`ProviderKey`) )
ENGINE=MyISAM DEFAULT CHARSET=latin1;
Run Code Online (Sandbox Code Playgroud)
每个登录提供程序都为用户提供唯一的密钥.这存储在ProviderKey
.该ProviderType
包含哪些登录提供该信息ProviderKey
属于,最后,该userId
柱连接至该信息users
表.因此,当您从其中一个登录提供程序收到成功登录时,您会ProviderKey
在表中找到对应的并使用为相关用户设置身份验证cookie.
我不确定你想ProviderType
成为一个enum
.制作另一个可以容纳这些的表可能更为正确.
例如,当用户首次向您的站点注册并通过Facebook登录时,您必须在users
表中创建一行.但是,没有password
,activation_key
并且resetpassword_key
参与其中.因此,您可能希望将这些字段移动到单独的表中,以使您的users
表仅包含核心用户数据,而不包含仅与单个登录机制(用户名/密码)相关的数据.
我希望这是有道理的,并指出你正确的方向.
/克劳斯