我有几个关于zf-oauth(Apigility)和php-oauth服务器数据库模式的问题。关于ZF-Oauth“官方”数据库模式的问题
数据库模式是:
https://github.com/zfcampus/zf-oauth2
https://bshaffer.github.io/oauth2-server-php-docs/
https://apigility.org/documentation/modules/zf-oauth2
所以,这个模式似乎真的“站:
CREATE TABLE oauth_clients (
client_id VARCHAR(80) NOT NULL,
client_secret VARCHAR(80) NOT NULL,
redirect_uri VARCHAR(2000) NOT NULL,
grant_types VARCHAR(80),
scope VARCHAR(2000),
user_id VARCHAR(255),
CONSTRAINT clients_client_id_pk PRIMARY KEY (client_id)
);
CREATE TABLE oauth_access_tokens (
access_token VARCHAR(40) NOT NULL,
client_id VARCHAR(80) NOT NULL,
user_id VARCHAR(255),
expires TIMESTAMP NOT NULL,
scope VARCHAR(2000),
CONSTRAINT access_token_pk PRIMARY KEY (access_token)
);
CREATE TABLE oauth_authorization_codes (
authorization_code VARCHAR(40) NOT NULL,
client_id VARCHAR(80) NOT NULL,
user_id VARCHAR(255),
redirect_uri VARCHAR(2000),
expires TIMESTAMP NOT NULL,
scope VARCHAR(2000),
id_token VARCHAR(2000),
CONSTRAINT auth_code_pk PRIMARY KEY (authorization_code)
);
CREATE TABLE oauth_refresh_tokens (
refresh_token VARCHAR(40) NOT NULL,
client_id VARCHAR(80) NOT NULL,
user_id VARCHAR(255),
expires TIMESTAMP NOT NULL,
scope VARCHAR(2000),
CONSTRAINT refresh_token_pk PRIMARY KEY (refresh_token)
);
CREATE TABLE oauth_users (
username VARCHAR(255) NOT NULL,
password VARCHAR(2000),
first_name VARCHAR(255),
last_name VARCHAR(255),
CONSTRAINT username_pk PRIMARY KEY (username)
);
CREATE TABLE oauth_scopes (
type VARCHAR(255) NOT NULL DEFAULT "supported",
scope VARCHAR(2000),
client_id VARCHAR (80),
is_default SMALLINT DEFAULT NULL
);
CREATE TABLE oauth_jwt (
client_id VARCHAR(80) NOT NULL,
subject VARCHAR(80),
public_key VARCHAR(2000),
CONSTRAINT jwt_client_id_pk PRIMARY KEY (client_id)
);
你可以找到它ARD”因为被Zend Technologies公司(Zend框架和apigility)通过,但我有一些问题:
为什么没有任何的‘普通’的主键? (int自动增量字段)。
我会使用oauth_users
表注册帐户和表单的字段是“电子邮件”和“密码”。我可以将电子邮件存储到oauth_users.username
字段中,但将此字段用作外键似乎不是一个好主意。最后,我的网址在profile-url/[:id]
比profile-url/[:username/]
(我的情况是电子邮件)好看。那么,我必须创建一个自定义主键还是可以解决问题?为什么没有外键?这个问题与第一个有关。我必须添加外键或者我可以反对问题?使用
oauth_users.username
作为我的其他表的外键,这似乎不是一个好主意。
1)部分原因是用一个查询来支持主要数据库(这里是对apigility使用的包的合并请求,它解决了这个问题https://github.com/bshaffer/oauth2-server-php/pull/149) 。以自动增量为例,你会失去PostgreSQL。 – Adam