我在客户端使用vue、vue路由器,在服务器端使用express、morgan(MEVN应用程序)
在客户端我用vue cookie设置cookie
this.$cookies.set('Login', this.login, new Date(Date.now() + 86400 * 5 * 1000))
this.$cookies.set('Password', this.password, new Date(Date.now() + 86400 * 5 * 1000))
在服务器端,我使用CookieParser
所以,在应用程序。我有这样的代码
const express = require('express');
const morgan = require('morgan');
const cors = require('cors');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const config = require('./config/config');
const db = require('./controllers/DB');
const mCLogs = require('./modelControllers/Logs');
const mCLogin = require('./modelControllers/Login');
const app = express();
app.use(morgan('combined'));
app.use(bodyParser.json());
app.use(cors());
app.use(cookieParser()); /*cookie parser*/
并且,在文件./ModelController/Login
中,我有这样一个GET请求的代码
exports.checkLoginSession = async (req, res, next) => {
/*its not all of the code*/
var loginHash = req.cookies['Login'];
console.log(loginHash)
if(loginHash == undefined) {
res.send({
logged: false,
description: "err mes"
});
} else {
res.send({
logged: true,
description: "mes"
});
}
}
问题是,var loginHash=req.cookies['Login'];总是返回未定义的,即使我有登录cookie
添加:我如何调用此方法:
客户端和使用axios
mounted () {
this.getLoginData()
},
methods: {
async getLoginData () {
const response = await LoginHandler.checkUserLoginSession()
if (response.data.logged === true) {
this.$router.push('/')
} else {
this.errorMessage = response.data.description
}
}
}
罗金汉德勒。js(客户端)
从@/service/api导入api
export default {
checkUserLoginSession () {
return api().get('/login')
}
}
app.js中的服务器端 /login链接
app.get('/login', mCLogin.checkLoginSession);
app.post('/login', mCLogin.checkUserData);
补充:
当我使用axios API这样的代码时,它不起作用:
从@/service/api导入api
export default {
checkUserLoginSession () {
return api().get('/login')
}
}
所以,当我调用app.get('/login')返回cookie值未定义,但是,如果我在浏览器中打开链接(服务器端)localhost:3000/login它返回正确的值
添加:checkUserData
exports.checkUserData = async (req, res) => {
try {
let login = req.body.login;
let password = req.body.password;
const user = await db.users.findOne({
where: {
Login: login,
Password: password
}
});
if(user == null)
{
res.send({
logged: false,
description: "Пользователь не найден."
});
return;
}
if(user.dataValues.Login == login && user.dataValues.Password == password)
{
res.send({
logged: true,
description: "Авторизация произошла успешно. Сейчас Вас перенаправит!"
});
return;
}
}
catch(ex) {
res.send({
logged: false,
description: "Произошла ошибка на стороне сервера."
});
console.log(ex);
return;
}
如果我向axios添加带有凭据的:true
。创建,服务器返回cookie值,但我在控制台行中发现了此错误
Access to XMLHttpRequest at 'http://localhost:3000/login' from origin 'http://localhost:8080' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
好了,伙计们,我解决了我的问题。
所以,答案是。
LoginHandler
代码:来自:
import api from '@/services/api'
export default {
checkUserLoginSession () {
return api().get('/login')
}
}
致:
import api from '@/services/api'
export default {
checkUserLoginSession () {
return api().get('/login', {withCredentials: true})
}
}
来自:
app.use(cors());
到:
app.use(cors({ credentials: true, origin: "http://localhost:8080" }));
致:
exports.checkLoginSession = (req, res, next) => {
const { Login, Password } = req.cookies;
//Where Login, Password ... is your cookie name
//console.log(Login)
if(Login == undefined) {
res.send({
logged: false,
description: "Нет сохранённых хешей для авторизации!"
});
} else {
res.send({
logged: true,
description: "Авторизован."
});
}
}
附言:感谢所有试图帮助我的人
根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果:
问题内容: 我正在通过以下方式从Java代码启动Windows进程(用C ++编写,但没有源代码): 我的问题是,waitFor()方法永远不会结束。因此,我尝试在一个简单的shell中启动该过程,并以shell中的许多打印正确结束(我猜是标准输出)。 因此,即使我现在不需要这些输出,我还是决定创建并启动一个读取标准输出的线程。这解决了问题。 因此,我的问题是以下问题:该解决方案是“启动并等待具有
当我试图对泛型类型执行TypedQuery时,我会从Eclipse得到一个未检查的类型转换警告。 我在这里使用泛型,因为在数据集中,由于查询和编辑的时间限制,每年都必须分离到不同的表中。表中有118年的数据(自1900年以来),我希望构建一个可以使用Java Reflections API每年扩展自己的系统。但是,这意味着在编译之前,我的父类不知道它们将对哪个子类或表进行操作。 下面是一些代码的示
问题内容: 以下是ajax请求。 这就是delete.php 运行代码后,它将成功删除文件,但不会显示任何消息。 我也尝试将ajax请求更改为: 仍然不显示该消息。所以我想在delete.php文件中出了点问题。请帮忙。 问题答案: 进行jquery + ajax + php的最佳方法如下: jQuery的: PHP:
问题内容: 我正在编写一个PHP脚本,用于通过Linux shell命令使用PHP调用它来检查网络连接: 我没有从ping获得错误消息的输出,这是我期望的: 如果该域是一个很好的域,例如yahoo.com,则将ping中的输出输出到数组中。但是,如果这是一个错误,例如它不会返回到数组。 为什么会发生这种情况,有更好的方法吗? 问题答案: 您应该将stderr重定向到stdout。 为此,请像这样更
为什么会 返回False,但是 不返回True,而是返回对象在内存中的位置。我找不到一种方法让这句话变为真,但我知道这是真的,因为: 返回"Yes!"。 正如我所说,这没有实际意义,至少目前没有,但它确实让我感到困惑。