创建 EXTERNAL_ID 列,并使用它来存储来自外部系统的标识符。您应该添加 EXTERNAL_TYPE 列并将其设置为“GOOGLE”。当您要集成更多身份验证提供程序时,可以将其设置为不同的值(例如“OPEN_ID”、“FACEBOOK”。)
与外部系统交互时,始终需要存储外键/标识符,以便可靠地访问和更新外部记录。
外部键与本地数据库中的 ID 不同,并且它绝对不是用户名..它只是它自己的列,并且应该具有相当大的大小,以便可以存储遇到的任何外部 ID。
VARCHAR(64) 可能是一个好的开始,因为根据定义,我们不对标识符的类型或内容负责——这些是由外部系统提供和定义的。我们只需要保持它的值不变,以便在与外部系统通信时使用。
EXTERNAL_TYPE 字段可让您区分“本地注册”用户和“通过 Google 或其他外部提供商注册”的用户。
例如:
create table "USER" (
ID int not null,
USERNAME varchar(64),
DISPLAY_NAME varchar(64),
EMAIL varchar(128),
PWD_HASH varchar(32), -- "native" password, salted & hashed for security
PWD_SALT varchar(32),
EXTERNAL_TYPE varchar(16), -- external-auth Type & ID.
EXTERNAL_ID varchar(64),
primary key (ID)
);
请注意,某些网站使用稍微更高级的方案,其中用户既可以通过 Google 注册,又可以通过本机密码登录。在这种情况下,通过一个凭据系统登录会检测现有的电子邮件和其他凭据系统 - 通常这会提示用户使用其他凭据进行身份验证,链接它们并使用两者。这仍然基于 EXTERNAL_ID 和 EXTERNAL_TYPE,但可能将它们放在与 USER 相关的 USER_CREDENTIALS 表上,而不是 USER 表本身。
对于用户身份验证,您也可能需要额外的列来存储某种加密/密钥/令牌。不确定,只是有可能。