gpt4 book ai didi

javascript - Node 请求如何处理 session

转载 作者:行者123 更新时间:2023-11-30 14:59:10 27 4
gpt4 key购买 nike

我正在使用带有请求模块的 node.JS。

我的问题是,我需要对每个请求的用户进行身份验证,因为 session 在 .then((response) => {}) block 之外被销毁。

如何将创建的 session 保存在类中供以后使用?

我尝试了一切都没有成功。

这是一个不工作的代码片段

login() {
const getLoginUrl = 'https://www.demourl.com/'
const postLoginUrl = 'https://www.demourl.com/account/login/'

rp({
url: getLoginUrl,
jar: this.cookieJar,
method: 'GET'
})
.then((body) => {
var csrftoken = this.cookieJar.getCookies(getLoginUrl)[1].toString().split('=')[1].split(';')[0];

var args = {
url: postLoginUrl,
json: true,
method: 'POST',
data: {
username: this.username,
password: this.password
},
headers: {
'method': 'POST',
'path': '/account/login/',
'cookie': 'csrftoken=' + csrftoken,
},
jar: this.cookieJar,
resolveWithFullResponse: true
}

rp(args)
.then((response) => {
//Here is a valid session
//But how can I use this session in different functions?
console.log('Post demourl.com/account/login success');
})
.catch((error) => {
console.log('Post demourl.com/account/login error: ', error);
});
})
.catch((error) => {
console.log('Get demourl.com error: ', error);
});
}

最佳答案

你应该将这个函数用作中间件,然后将你想要附加的内容附加到你的请求中

尝试在你的主脚本中做

'use strict'

const express = require('express');
const login = require('./login');
const app = express()


app.use(login);// use this if you want all your routes to check login or put it in a specific route

app.get('/', (req,res)=>{
//this route is only for loged in users
});

const server = http.createServer(app).listen(process.env.PORT);


module.exports = app;

在你的登录脚本中

const login = (req, res, next) => {
const getLoginUrl = 'https://www.demourl.com/'
const postLoginUrl = 'https://www.demourl.com/account/login/'

rp({url: getLoginUrl, jar: this.cookieJar, method: 'GET'})
.then((body) => {
var csrftoken = this.cookieJar.getCookies(getLoginUrl)[1].toString().split('=')[1].split(';')[0];

var args = {
url: postLoginUrl,
json: true,
method: 'POST',
data: {
username: this.username,
password: this.password
},
headers: {
'method': 'POST',
'path': '/account/login/',
'cookie': 'csrftoken=' + csrftoken,
},
jar: this.cookieJar,
resolveWithFullResponse: true
}

rp(args)
.then((response) => {
res.loginResponse = response; // save the response for later use

console.log('Post demourl.com/account/login success');
next();
})
.catch((error) => {
console.log('Post demourl.com/account/login error: ', error);
return res.send(error) //send the error
});
})
.catch((error) => {
console.log('Get demourl.com error: ', error);
return res.send(error) //send the error
});
}

module.exports = login

关于javascript - Node 请求如何处理 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807076/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com