php - ejemplos - tagsinput get value
Estructura de la base de datos para la implementación de inicio de sesión social? (2)
Le sugiero que presente el concepto de un AuthenticationProvider
de 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;
Cada proveedor de inicio de sesión proporciona una clave única para el usuario. Esto se almacena en ProviderKey
. ProviderType
contiene información sobre el proveedor de inicio de sesión al que pertenece ProviderKey
y, finalmente, la columna userId
la información con la tabla de users
. Entonces, cuando recibe un inicio de sesión exitoso de uno de los proveedores de inicio de sesión, encuentra el ProviderKey
correspondiente en la tabla y usa la cookie de autenticación para el usuario en cuestión.
No estoy seguro de que quieras que ProviderType
sea una enum
. Probablemente sería más correcto hacer otra tabla que pueda contener estos.
Cuando un usuario se registra por primera vez en su sitio e inicia sesión a través de Facebook, por ejemplo, tendrá que crear una fila en la tabla de users
. Sin embargo, no habrá password
, activation_key
y resetpassword_key
involucradas. Por lo tanto, es posible que desee mover esos campos a una tabla separada, de modo que su tabla de users
solo contenga los datos centrales del usuario, y no haya datos que solo sean relevantes para un solo mecanismo de inicio de sesión (nombre de usuario / contraseña).
Espero que esto tenga sentido y que te apunte en la dirección correcta.
/ Klaus
En mi aplicación, tengo una tabla de "usuarios" que tiene la siguiente estructura.
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 ;
Quiero implementar el inicio de sesión social a través de Facebook, Twitter y OpenID en mi aplicación, tal como lo hizo StatckOverflow. Por favor, sugiérame todos los cambios que requeriré en mi base de datos y cómo se implementará la lógica en PHP, junto con la facilidad de inicio de sesión existente.
¡Gracias!
Echa un vistazo a openidexplained.com para las primeras explicaciones.