我目前正在我的网站上设置Open ID身份验证,我在将其与当前的登录系统和数据库相结合时遇到了麻烦......我已经阅读了Plaxo&它推荐这种类型的表来存储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 | Email
Userid用于引用评论,评级等的用户详细信息(因此它作为用户标识符进入评论表和评级表)
我想要一个类似于Stack overflow使用你的Open ID登录的系统,它会给你一个未知的(OPENID-provider)显示名称....同时保持我当前的登录系统完好无损。
1)如何在不影响当前登录设置的情况下,将用户的Open ID详细信息添加到当前用户信息表中?
2)目前我使用User-id(为每个用户生成唯一的)来存储在会话中以维护Login。如果是Open ID,我现在该怎么办?
*我的想法(我不知道我是否对不对)
- 添加一个open-id字段,用于存储每个用户的open id提供程序提供的唯一open id url,并为非open-id-users设置为null。
- 将User-id设为文本字段并存储open id url的md5。(将其存储在会话中以维护登录)。
- 我不知道如何处理为每个用户设置为唯一的显示名称/用户名,因为我想显示未知(OPENID_provider)(对于使用open-id的用户),这可能是已从配置文件设置更改...
任何建议都会有所帮助....谢谢
答案 0 :(得分:2)
您展示的表格布局的想法是从用户那里获得1:多个:openids。
因此,不需要更改用户表。
当有人使用OpenID登录时,您检查该OpenID是否在openids表中。如果是这样,那么您拥有该用户的user_id,并且您已完成。
否则创建一个新用户(没有设置用户名/密码)并在openids表中插入(openid,user_id)对。
您的模板可以显示任何好的占位符(例如他们的OP或其他),它通常会显示用户名为空的用户的用户名。
希望您已经禁止使用空白密码登录,因此应该没有安全问题。
答案 1 :(得分:1)
这个怎么样?
display_name
列添加到users
表,该表不必是唯一的。username
可选password
和users
users
中创建一行,其中包含空用户名/密码,显示名称设置为“unkonwn(provider)”。这意味着用户可以拥有用户名/密码,但他们没有。它们也可以有一个或多个OpenID,但它们不必。他们可以使用非唯一的显示名称。
答案 2 :(得分:1)
选项1:只允许一种登录类型
这是我的建议(更新以防止需要编辑与username
相关的所有业务逻辑):
loginid
的新列,以允许存储OpenID和旧用户名,同时在此列中添加UNIQUE INDEX
。loginid
username
来自DELETE INDEX
的username
允许它们是非唯一的。从OpenID创建新用户时,请按照说明将username
值设置为unknown(google)。password
旧版登录,忽略OpenID。选项2:允许多次登录 (也可以轻松扩展到链接来自不同来源的多个配置文件)
email
)。userid
(FK到主记录),username
(存储适合登录方案的用户名),password
这两个选项都有明显的缺陷,但它有望让你开始朝着正确的方向前进。