如何访问' req'来自" access"的回送对象钩?

时间:2018-04-17 19:25:06

标签: loopbackjs

似乎操作挂钩"访问"不包含ctx.req对象。

我想要实现的是会话数据应该在所有模型中都可用。

中间件中定义的会话:

 "session": {
     "express-session": {
         "params": {
         "secret": "mysceret",
         "saveUninitialized": true,
         "resave": true
        }
    }
 }

User.js

req.session.user = userData; 

并访问Post模型中的会话:

Post.observe('access', function(ctx, next) {     
   console.log('ctx.req : ' , ctx.req) // undefined
   ctx.query.filter = { tenantId: ctx.req.session.user.tenantId }; 
   // so cannot able to find session data here.   
   next();
}); 

快递会话:"express-session": "^1.15.6"

环回版本:"loopback": "^3.0.0"

我缺少什么或者我以错误的方式访问会话? 请帮忙。

由于

2 个答案:

答案 0 :(得分:0)

我要在accessing current logged in user id in custom route in loopback

处大量借用我的回答
  

操作挂钩上下文接受您提交给它的值,如   以及与模型相关的一些默认值,它永远不会有   userId默认情况下。   https://loopback.io/doc/en/lb3/Operation-hooks.html#operation-hook-context-object

操作挂钩中的ctx 与远程方法中的ctx相同。

如果要传递其他操作挂钩上下文值,则必须手动调用模型方法并将其作为第二个参数发送。

model.create({color: 'red'}, {contextValue: 'contextValue', anotherContextValue: 'anotherContextValue'}, (err, obj) => {
   // Callback things...
}

答案 1 :(得分:0)

如果您已登录,操作挂钩可以从ctx.options中读取accessToken: https://loopback.io/doc/en/lb3/Using-current-context.html#access-the-context-from-operation-hooks

Model.observe('access', async ctx => {
  let {options: {accessToken = {}} = {}, ...otherAttributes} = ctx;
  console.log(accessToken);
});

由于中间件具有对"routes:before"req的访问权限,因此甚至可以使用钩在req.accessToken部分上的中间件来设置accessToken的某些属性。

您的中间件可能会说:

module.exports = function() {
  return function setSession(req, res, next) {
    let {accessToken} = req;
    accessToken.session = req.session;
    next();
  };
};

however,如果您已经在做:

 req.session.user = userData; 

要将当前用户的值存储到会话中,您可以使用accessToken.user()来访问该用户,无论您在何处可以获得对有关令牌的引用。