首先我想说,我已经看到有关相关问题的问题,但没有找到答案。
我想在回送中使用redis进行会话,但req在代码中不可用。
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 }));服务器/ server.js
我想在环回应用程序上实现基于Redis的快速会话,但是我无法自己编写整个路由控制器,因此无法找到实现它的方式。
我目前正在扩展模型并创建remoteMethod(),但无论如何我无法访问“req”。
这是我的TrmptUsers模型代码(请参见第3行)
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'} } ); };通用/模型/ trmpt-users.js
first i would like to say that i have already seen questions regarding related issues but did not find the answer.
I want to use redis for session in loopback, but req is not available in code.
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 }));server/server.js
I want to implement Redis Based express sessions on loopback application but i cant find the way to do it without writing the whole route controller myself.
I am currently extending the model and creating a remoteMethod() but i cannot access "req" in anyway.
this is my TrmptUsers Model code (see line 3)
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'} } ); };common/models/trmpt-users.js
最满意答案
我很久以前就找到了解决我所有问题的方法,因为有人投了票,我想他们可能需要一个答案,所以我在这里发布一个答案。
服务器/ server.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对象添加到参数中。
模型specific.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。
I found a solution to all my problems above a long time ago, since someone up-voted it i think they might want an answer so I am posting one here.
server/server.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 }));then when you create your models slc:loopback model you get an option to add req object to your parameters.
model-specific.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": "" } ], ...Then just use req.session in any way you want and remember to install redis-server first.
更多推荐
发布评论