将会话存储在操作挂钩中-环回

时间:2019-07-30 12:36:05

标签: session loopbackjs express-session connect-mongo

我想使用{{1}在Loopback应用程序中的userIdaccessToken操作钩子中存储after savebefore save以外的其他数据以存储在会话中}。

我的express-session中有此内容:

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 })); 对象,所以我不能以明确的方式来实现。

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

编辑: 通过将其添加到model.json的remote-method中,我找到了一种在远程方法中设置会话的方法:

req

然后,将"accepts": [ { "arg": "req", "type": "object", "http": { "source": "req" } } ] 参数添加到远程方法功能中,

req

现在,问题是我想在操作挂钩中获取此会话值

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

1 个答案:

答案 0 :(得分:0)

尝试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进行访问,就像session中的loopback一样。