【发布时间】:2020-05-02 21:25:53
【问题描述】:
我正在撰写一份关于我设计的应用程序的报告,其中包括我认为的后端的 REST API。
应用程序授权用户从数据库请求资源的方式是使用会话 cookie。我知道关于会话 cookie 服务器端是否违反 REST 存在很多争论,但我没有找到任何具体说明,说明我使用它们的方式违反了 REST 规则。
我正在使用带有express-session 包的节点Express 框架。创建和存储 cookie 的方式是通过中间件将会话数据保存到我的 mongodb 实例中,connect-mongodb-session 如下所示:
app.js
// app.js imports start
const mongoose = require("mongoose");
const session = require("express-session");
const config = require("config");
const MongoDBStore = require("connect-mongodb-session")
// app.js imports end
const mdbStore = new MongoDBStore({
uri: config.get("mongoURI"),
mongooseConnection: mongoose.connection,
collection: "sessions",
ttl: config.get("sessionLife") / 1000,
});
// Session middleware
app.use(
session({
name: config.get("sessionName"),
genid: function () {
return uuid.v4();
},
secret: config.get("sessionKey"),
resave: false,
saveUninitialized: false,
cookie: {
sameSite: true,
httpOnly: true,
maxAge: config.get("sessionLife"),
},
store: mdbStore,
})
);
这意味着当客户端请求进来时,客户端的授权数据将通过req.session 获得,但该数据来自我的数据库,而不是存储在任何地方的服务器上。
所以最终这意味着我的服务器不直接存储任何用户数据,而是依赖于存储在数据库中的会话 cookie 的状态。这是否意味着 API 不是 RESTful?
我通读了这篇 SO 文章,只发现了一小部分提到了存储在数据库中的 cookie Do sessions really violate RESTfulness?,但仍然非常感谢任何人的任何 cmets/澄清/批评。谢谢
【问题讨论】:
标签: javascript node.js mongodb rest express