首先我想说,我已经看到有关相关问题的问题,但没有找到答案。
我想在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/