使用OpenID的数据库设计是什么?


what is the design of database to use openID?

我想将 janrain 用于我的登录系统, 一切准备就绪,但我不知道如何构建我的数据库?使用 openID 的数据库设计是什么? 特别是当某些用户有一些不同的提供程序时,我怎么知道他们是谁?他们是新用户还是旧用户?我想要一个完整的数据库设计

存储用户信息的表中为 openId 添加一列。

一个例子如下:

create table users (
first_name varchar(50),
last_name varchar(50),
email_address varchar(100),
openId varchar(150));

您还可以为 openId 设置索引,以便在将用户登录到应用程序时搜索速度更快。还要添加 UNIQUE 约束,以便具有相同 openId 的用户不会出现两行

您所需要的只是一个列,您可以在其中存储您正在使用的任何 OpenID 库返回的身份 URL。

您可以考虑将其放在一个单独的表中,该表只有identity列和userid列,以便用户可以为其帐户分配多个 openid。

我会建议你在我的应用程序中做一些事情。我在用户表中有一列是布尔值。如果用户使用 openID,则为 1,如果不使用 openID,则为 0。另一个表是 opneID 表,该表在他们使用开放 ID 时提供了提供程序和密钥。因此,您将有三种方案,如下所示:

  1. 用户已登录,并希望在下次登录时添加 openID。
  2. 用户已注册,但希望在下次登录时使用 openID。
  3. 用户未注册,想要使用 OpenID 登录。

这是我所做的:

  1. 详细信息已经存储,因此查找当前登录的用户并使 openID 布尔值为 true 并添加他将提供的 openID 详细信息。

  2. 当他点击openID
  3. 时,询问他是否已经注册,是否要求他提供电子邮件ID和密码,然后使用openID详细信息。

  4. (这是最难的部分)将 openID 布尔值设为 1 并添加 OpenID 的详细信息,然后给他一个表单,该表单只询问适合您的应用程序的重要细节。根据应用程序的规模,您可能不需要第二种形式。我正在处理的应用程序需要用户提供额外的信息。如果您想跳过第二步,您可以查看Facebook API提供的一些选项来检索first_name last_name等详细信息并保存。

因此,当用户登录时,请检查 OpenID 布尔值是否设置为 0 或 1(如果设置为 1),请使用您可能已通过正确连接保存的相应 OpenID 详细信息。

发现最困难的部分是第三步,我不应该以某种方式从使用 OpenID 的用户那里获取任何密码。这违反了数据库约束。我无法取消约束,因为这会给想要注册的其他用户带来问题。所以我不得不以某种方式绕过 openID 用户的约束。这可能不是最好的解决方案,但它可能会对您有所帮助。祝你好运!!