node.js - 基于环回 redis 的 session

标签 node.js redis loopbackjs

首先我想说,我已经看到有关相关问题的问题,但没有找到答案。

我想在loopback中使用redis做session,但是代码中没有req

server/server.js

var redis   = require("redis");
var session = require('express-session');
var redisStore = require('connect-redis')(session);
var client  = redis.createClient();

var app = module.exports = loopback();

app.use(session({
    secret: '0`3VTw;hQ|3/`:95ZYu{0J82O>{}7JC/',
    // create new redis store.
    store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl :  260}),
    saveUninitialized: false,
    resave: false
}));

我想在环回应用程序上实现基于 Redis 的快速 session ,但如果不自己编写整个路由 Controller ,我找不到实现它的方法。

我目前正在扩展模型并创建一个 remoteMethod(),但无论如何我都无法访问“req”。

这是我的 TrmptUsers 模型代码(见第 3 行)

common/models/trmpt-users.js

module.exports = function(TrmptUsers) {
 TrmptUsers.login = function(username, password, cb) {
    console.log(TrmptUsers.app.session); //i want access to req variable to work with redis here.
 var ursalt = security.gen_salt(username);
        password = security.decrypt256(password, ursalt);
        TrmptUsers.findOne({fields:{usrPwd:true,usrAccessToken:true},where:{and:[{usr_username:username}]}},function(err,result){
        security.verifyPassword(password, result.usrPwd, function(err, verify) {
                if (verify) {
                User.generateVerificationToken(username, cb)
                    cb(null,result.usrAccessToken);
                }
                else {
                   cb({status:401,message:"Invalid Username/Password"},null);   
                }
            });
        });
    }
    TrmptUsers.remoteMethod(
        'login', 
        {
          accepts: [
          {arg: 'username', type: 'string', required: 'true'},
          {arg: 'password', type: 'string', required: 'true'},
          ],
          returns: {arg: 'accesstoken', type: 'string'}
        }
    );
};

最佳答案

我很久以前就找到了解决上述所有问题的方法,因为有人对它投了赞成票,我想他们可能想要一个答案,所以我在这里发布了一个。

服务器/服务器.js

var redis   = require("redis");
var session = require('express-session');
var redisStore = require('connect-redis')(session);
app.use(session({
    secret: 'hello',
    store: new redisStore({ host: 'localhost', port: 6379, client: client,ttl :  3600}),//1 hour
    saveUninitialized: false,
    resave: false
}));

然后当您创建模型时 slc:loopback model 您可以选择将 req 对象添加到您的参数中。

模型特定的.json

...
"methods": {
    "userLogin": {
      "isStatic": true,
      "accepts": [
        {
          "arg": "req",
          "type": "object",
          "required": true,
          "description": "",
          "http": {
            "source": "req"
          }
        },
        {
          "arg": "username",
          "type": "string",
          "required": true,
          "description": "Username"
        },
        {
          "arg": "password",
          "type": "string",
          "required": true,
          "description": "Password"
        }
      ],
      "returns": [
        {
          "arg": "accessToken",
          "type": "string",
          "root": false,
          "description": ""
        }
      ],
...

然后以任何你想要的方式使用 req.session 并记住先安装 redis-server。

关于node.js - 基于环回 redis 的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35962910/

相关文章:

node.js - 独立 WatchOS6 应用程序的 APNS 失败

node.js - winston 每日轮换删除 .GZIP 文件

node.js - 环回错误 AUTHORIZATION_REQUIRED 状态代码 401

javascript - 如何将 EJS 模板转换为字符串?

security - Lua redis 中转加密连接

redis - 如何将二进制值转换为Redis命令?

node.js - 作为守护进程运行的带有 redis 的 Docker 容器不运行

javascript - 隐藏环回模型中的嵌套属性

node.js - 使用 REST 进行环回电子邮件验证(其中配置了所需的 verifyOptions)

node.js - 学习 Node - Express 公共(public)文件夹不工作