基于loopback的redis会话(loopback redis based sessions)

编程入门 行业动态 更新时间:2024-10-28 05:24:51
基于loopback的redis会话(loopback redis based sessions)

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

我想在回送中使用redis进行会话,但req在代码中不可用。

服务器/ 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的快速会话,但是我无法自己编写整个路由控制器,因此无法找到实现它的方式。

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

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

通用/模型/ 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'} } ); };

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.

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 }));

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)

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'} } ); };

最满意答案

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

服务器/ 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.

更多推荐

本文发布于:2023-08-02 17:13:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1378649.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:redis   loopback   sessions   based

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!