Loopback中使用中间件配置会话及权限校验的技术咨询
解决LoopBack会话中间件的两个核心需求
嘿,刚接触LoopBack的话,这两个关于会话中间件的需求确实容易卡壳,我结合你已经安装express-session的前提,一步步给你拆解解决:
1. 配置会话中间件并在会话中存储access token等数据
你已经找到server/middleware.json里的"session": {},配置项,接下来要把express-session的具体配置填进去,还要注意中间件的执行顺序(会话中间件必须在路由处理之前加载):
第一步:完善middleware.json的session配置
把原来空的session项替换成下面的内容,这里的配置是express-session的标准参数,你可以根据自己的需求调整:
{ "initial": { // ... 保留原有初始中间件配置 }, "session": { "express-session": { "params": { "secret": "你的自定义加密密钥(一定要改成复杂字符串!)", "resave": false, "saveUninitialized": false, "cookie": { "secure": false, // 生产环境建议设为true(需配合HTTPS) "maxAge": 3600000 // 会话有效期1小时,单位毫秒 } } } }, // ... 保留其他中间件阶段配置 }
第二步:自定义中间件存储会话数据
如果要在会话中设置access token或其他值,你可以写一个自定义中间件,放在session阶段之后、routes阶段之前。比如先在server/middleware目录下新建set-session-data.js:
module.exports = function(req, res, next) { // 假设你从请求头或业务逻辑中拿到了access token const accessToken = req.headers['authorization']?.split(' ')[1]; if (accessToken) { // 把access token存入会话 req.session.accessToken = accessToken; // 还可以存其他自定义值,比如用户ID、用户名 req.session.userId = 'user_123456'; req.session.username = 'test_user'; } next(); // 继续执行后续中间件或路由 };
然后在middleware.json的auth阶段(或session之后的任意阶段)添加这个自定义中间件:
{ // ... 其他配置 "auth": { "./middleware/set-session-data": {} }, "routes": { // ... 保留原有路由处理中间件配置 } }
2. 添加会话存在性判断,无会话则跳转登录
同样需要写一个自定义中间件,用来拦截请求并判断会话是否有效,一定要排除登录相关的路由,避免出现无限跳转的问题:
第一步:编写会话校验中间件
在server/middleware目录下新建check-session.js:
module.exports = function(req, res, next) { // 排除登录页面/接口的路径,比如'/login'或'/api/auth/login',可根据你的实际路由调整 const isLoginPath = req.path === '/login' || req.path.startsWith('/api/auth/login'); if (isLoginPath) { return next(); // 登录相关请求直接放行 } // 判断会话中是否存在有效标识(这里用accessToken为例) if (!req.session?.accessToken) { // 无有效会话,跳转至登录页面 return res.redirect('/login'); } // 会话有效,继续执行后续流程 next(); };
第二步:配置中间件执行顺序
把这个校验中间件放在auth阶段,且要在set-session-data之后(如果有的话),确保先处理会话数据再校验:
{ // ... 其他配置 "auth": { "./middleware/set-session-data": {}, "./middleware/check-session": {} }, "routes": { // ... 保留原有路由处理中间件配置 } }
小提示
- 生产环境下,
cookie.secure一定要设为true,这样cookie只会通过HTTPS传输,提升安全性 secret要设置一个复杂的随机字符串,绝对不要用示例里的占位符- 你提到的
middleware.json是LoopBack 3的配置方式,以上代码完全适配该版本
内容的提问来源于stack exchange,提问作者user8411743
相关产品推荐
相关产品推荐

