【问题标题】:Store session in operation hook - Loopback在操作钩子中存储会话 - Loopback
【发布时间】:2019-12-07 20:34:18
【问题描述】:

我想存储除userIdaccessToken 之外的一些数据以存储在会话中,在使用express-session 的Loopback 应用程序中的after savebefore save 操作挂钩中。

我的server/server.js 中有这个:

....
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
....

app.use(session({
    name:'session-name',
    secret: 'keyboard cat',
    store: new MongoStore({url: 'mongodb://localhost/test', ttl:1}),
    resave: false,
    saveUninitialized: true
}));

由于我使用一些参数定义远程方法,它实际上传递的是参数而不是 req 对象,所以我不能以快速方式进行。

如何使用会话来存储和获取价值?

编辑: 我找到了一种在远程方法中设置会话的方法,方法是将它添加到我的 model.json 的远程方法中:

"accepts": [
    {
        "arg": "req",
        "type": "object",
        "http": {
            "source": "req"
        }
    }
]

并且,将req 参数添加到远程方法函数中,

Model.remoteMethod = function (req, callback) {
    req.session.data = { 'foo': 'bar' }
    callback(null)
};

现在,问题是我想在操作钩子中获取这个会话值

Model.observe('before save', function (ctx, next) {
    //How to get the session here?
})

【问题讨论】:

  • 您收到的错误和响应。请解释
  • 我不知道如何在会话中存储数据(访问令牌或用户 ID 除外)
  • 这有点小技巧,但我会使用远程挂钩将整个上下文对象 (loopback.io/doc/en/lb3/…) 附加到有问题的实例,然后在 before save 挂钩中将其删除。问题是模型挂钩不一定与单个请求相关联。这是他们在 LoopBack 4 中已经或正在尝试解决的问题。

标签: session loopbackjs express-session connect-mongo


【解决方案1】:

试试this now

你可以设置ctx值:

var LoopBackContext = require('loopback-context');

    MyModel.myMethod = function(cb) {
      var ctx = LoopBackContext.getCurrentContext();
      // Get the current access token
      var accessToken = ctx && ctx.get('accessToken');
      ctx.set('xx', { x: 'xxxx' } );

    }

获取 ctx 值:

 module.exports = function(MyModel) {
      MyModel.observe('access', function(ctx, next) {
        const token = ctx.options && ctx.options.accessToken;
        const userId = token && token.userId;
        const modelName = ctx.Model.modelName;
        const scope = ctx.where ? JSON.stringify(ctx.where) : '<all records>';
        console.log('%s: %s accessed %s:%s', new Date(), user, modelName, scope);
        next();
      });
    };

loopback 上下文存储 userIdaccesTokan。在整个网络中,您可以使用ctx 访问它的工作方式类似于loopback 中的session

【讨论】:

  • 嘿,我试过这个,但是在 ctx 对象中存储的对象未定义。
  • 你能安装环回上下文模型吗..?
  • 是的,我和 cls-hooked 一起安装的
  • 你能添加 server/middleware.json 这个代码吗 { "initial": { "loopback-context#per-request": { "params": { "enableHttpContext": true } } } }
  • 你的环回版本是什么..?
猜你喜欢
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 2016-04-07
  • 2011-10-10
  • 2011-10-09
  • 2012-11-12
相关资源
最近更新 更多