我使用Express.js制作Web应用程序,并使用passportjs学习身份验证。我基本上有一个crud web应用程序,让我可以编辑,删除或添加任何人从我的Web应用程序中的任何内容。这是我的Postgres数据库的样子。
\connect usertesterdb;
CREATE TABLE IF NOT EXISTS users (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(255),
email VARCHAR(255),
password TEXT UNIQUE NOT NULL
);
和
CREATE TABLE IF NOT EXISTS mymenutable (
id BIGSERIAL PRIMARY KEY,
foodtitle VARCHAR(255),
fooddescription TEXT,
);
什么是最好的方式,以便我可以实现我的目标?目前,这两个表没有相互通信。我希望能够使代码清洁和可维护的一些策略或良好实践。
编辑:我想我可以在我的“mymenutable”中添加另一个名为“userid”的列,它从“users”表中引用用户的id号,然后每次用户创建或编辑或删除他们的帖子或菜单时,都会检查登录用户的id是否等于菜单的“userid”。我不知道这是否是正确的方法,或者它是否可以以某种方式被操纵。
是的,向mymenutable
添加外键将是将用户与每个条目相关联的规范和最佳方式:
ALTER TABLE mymenutable
ADD COLUMN userid bigint REFERENCES users(id);
您应该填充现有行的列,然后将其设置为NOT NULL
。
这是偏离主题,但我会废除UNIQUE
上的password
约束。我认为它没有任何好处,但除此之外,这是一个明显的安全风险:用户可以通过设置自己的密码来找出其他用户的密码,他们猜测他们可能是其他人的密码 - 错误意味着他们找到了一个。