【问题标题】:How to access 'req' object in loopback from "access" hook?如何从“访问”挂钩访问环回中的“请求”对象?
【发布时间】:2019-08-15 09:30:15
【问题描述】:

似乎操作钩子“访问”不包含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"

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

谢谢

【问题讨论】:

  • 你参加会议了吗? @uday214125

标签: loopbackjs


【解决方案1】:

我将从accessing current logged in user id in custom route in loopback 的回答中大量借用

操作钩子上下文接受你提交给它的值,如 以及与模型相关的一些默认值,它永远不会有 默认用户 ID。 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...
}

【讨论】:

【解决方案2】:

如果您已登录,操作挂钩可以从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" 部分的中间件在 accessToken 上设置一些属性,因为中间件可以访问 reqreq.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() 访问该会话,只要您可以获得对相关令牌的引用。

【讨论】:

    猜你喜欢
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2015-03-18
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多