Web 如何继续使用新的OpenID用户

Web 如何继续使用新的OpenID用户,web,openid,Web,Openid,我正试图找到面对这种情况的方法 在我的数据库中有这些与“本机”用户和“外部”用户相关的表来记录“本机”用户和OpenId用户: --native user-- id (primary key) email (unique) screen_name (unique) --external user-- openid_id native_user_id 当新用户使用OpenId帐户登录时,我会创建一个新的“本地”用户,并为其分配OpenId帐户标识符。在我自动创建这个新的“本地”用户之前,我

我正试图找到面对这种情况的方法

在我的数据库中有这些与“本机”用户和“外部”用户相关的表来记录“本机”用户和OpenId用户:

--native user--
id (primary key)
email (unique)
screen_name (unique)

--external user--
openid_id
native_user_id  
当新用户使用OpenId帐户登录时,我会创建一个新的“本地”用户,并为其分配OpenId帐户标识符。在我自动创建这个新的“本地”用户之前,我尝试从OpenId获取一些信息,如姓名和电子邮件。如果两者都存在,用户将“神奇地”注册,但如果缺少这些字段,用户将收到一张表格,要求他填写信息

好了,现在我的问题来了

如果新的OpenId用户登录该站点,并且OpenId给我一封已经分配给现有本地用户的电子邮件,我应该如何继续?(请记住,电子邮件是我表格中唯一的字段)

  • 请他更改存储在我系统中的电子邮件
  • 将此OpenId分配给我的数据库中的匹配项并登录用户。可能是同一个用户试图使用不同的OpenId登录
  • 拒绝登录,即使可能是同一用户尝试使用不同的OpenId登录
  • 拒绝登录,并警告访问者在用户登录后必须为其分配新的OpenId
  • 就个人而言,我认为我应该选择4,因为1可能会导致人们无意中为他的第二个OpenId帐户创建一个新用户而不被注意。 对于路径nº2,我认为声明新的OpenId对应于同一个用户是危险的。有人可以在我的系统中创建一个带有电子邮件的OpenId帐户来访问该本地用户

    你觉得怎么样


    PD:我读过这个问题:但这不是我想要的100%。

    永远不要选择选项2:就像你说的,你不想让错误的人访问。除此之外,您可以决定是拒绝访问还是允许访问,但要求用户提供不同的电子邮件地址。我不认为拒绝访问有什么意义,因为用户无论如何都可以用另一个电子邮件地址创建一个新的OpenID。

    为什么不取消电子邮件必须是唯一的限制?您有一个唯一的id、屏幕名称和(对于某些用户)openid URL。这还不够吗?

    当然,但我是否应该警告用户,如果他想将这个新的OpenId分配给他已经存在的用户,他必须从他的个人资料中进行分配?如果你愿意,你可以这样做。一个简单的通知就可以了,然后由用户自己决定,如果他愿意的话。我想让用户用电子邮件和/或用户名登录,就像Twitter一样。