我目前正在我的网站建立开放身份认证,我有困难将它与我目前的登录系统和数据库.我在柏拉图上读过这篇文章&它推荐这种类型的表来存储openid信息。
create table user_openids (
openid_url varchar(255) not null,
primary key (openid_url),
user_id int not null,
index (user_id)
);这是我现在的用户信息表。
Userid(PRIMARY) | username(UNIQUE) | password | EmailUserid用于引用用户-评论、评级等的详细信息(因此它作为用户标识符进入注释表和评等表)。
我想要一个类似于堆栈溢出使用的系统,只要使用您的开放ID登录,它就会给您一个未知的(OPENID-provider)显示名称.同时保持我目前的登录系统完好无损。
1)如何在不影响当前登录设置的情况下,将用户的开放ID详细信息添加到当前用户信息表中?
2)当前我使用用户id(为每个用户生成唯一的)存储在会话中以维护登录。如果有开放的ID,我现在该怎么办?
*我的想法(我不知道我是否正确)
-添加一个open id字段来存储每个用户的开放id提供程序提供的惟一的开放id url,并将其设置为空用于非开放id用户。
-使用户id成为文本字段,并存储打开的id url的md5 (将其存储在会话中以维护登录)。
-我不知道如何处理为每个用户设置为唯一的显示名称/用户名,因为我想显示未知(OPENID_provider)(对于使用open-id的用户),它可以从配置文件设置中更改.
任何建议都是helpful....Thanks
发布于 2009-11-05 19:12:36
您所显示的表布局的思想是有1:多数来自用户:openid。
因此,不需要对users表进行更改。
当有人使用OpenID登录时,您将检查该OpenID是否位于openids表中。如果是这样的话,您就拥有了用户的user_id,并且已经完成了。
否则,创建一个新用户(没有设置用户名/密码),并为他们插入一个(openid,user_id)对到openids表中。
模板可以显示任何漂亮的占位符(比如OP,或者其他什么),它通常会为用户名为空白的用户显示用户名。
希望您已经不允许使用空白密码登录,因此不存在安全问题。
发布于 2009-10-18 10:36:19
那这个呢?
display_name表中添加一个users列,该表不必是唯一的。username和password在users中可选users中创建一行,并显示设置为"unkonwn (provider)“的名称。这意味着用户可以拥有用户名/密码,但他们不必这么做。他们也可以有一个或多个OpenID,但他们不必这么做。它们可以使用非唯一的显示名称。
发布于 2009-11-05 07:09:54
选项1:只允许一种登录类型
下面是我的建议(更新以避免编辑与username相关的所有业务逻辑):
loginid的新列,以允许存储OpenID和旧用户名,并在该列中添加UNIQUE INDEX。loginid的现有数据填充usernameDELETE INDEX从username允许他们是非唯一的。当从OpenID创建新用户时,请将username值设置为未知(Google),如所述。password,对于OpenID则忽略它。选项2:允许多个登录(也很容易扩展到从不同来源链接多个配置文件)
email )。userid (FK to master record)、username (存储与登录方案相适应的用户名)、password这两种选择显然都有缺陷,但希望它能让你朝着正确的方向前进。
https://stackoverflow.com/questions/1584552
复制相似问题