JYe*_*Yeh 12 sql authentication accounts
我已经阅读过有关使用Google处理来自此网站的登录的内容,但它并未解释有关数据库应该发生什么的问题.
通常在数据库的用户帐户,你就必须像场id,username,password,等.从我在阅读的链接,你最终会得到一个用户ID令牌,并且里面是一个被称为"关键sub"有一个值它可以用来识别用户.
我的问题是,这个" sub"将存储在数据库中的哪个位置?它会进入id现场吗?Username领域?
我认为不应该进入该username领域,因为有人可能会创建一个与某人的Google subID 完全相同的用户名.但是把它放在id现场似乎也很奇怪.
此外,user accounts表格中是否需要另一个字段作为布尔值,以便区分本地签名的用户和通过Google登录的用户?
Tho*_*s W 21
创建一个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)
);
Run Code Online (Sandbox Code Playgroud)
请注意,某些网站使用稍微更高级的方案,用户既可以通过Google注册,也可以通过本机密码登录.在这种情况下,通过一个凭据系统登录会检测现有的电子邮件和其他凭据系统 - 通常会提示用户使用其他凭据进行身份验证,链接它们并使用它们.这仍然基于EXTERNAL_ID和EXTERNAL_TYPE,但可以将它们放在与USER相关的USER_CREDENTIALS表上,而不是USER表本身.
对于用户身份验证,还可以想象您可能需要为某种加密/密钥/令牌添加其他列.不确定,只是一种可能性.