我正在学习网络开发人员,我想在“ /”路由中发出获取请求时传递“授权”标头。
index.js:
app.get("/", function (req, res) {
res.render("algoritmika", {logged: VefiryLogin(req)});
});
“ VerifyLogin”方法期望带有“授权”标头的请求,这显然没有传入。我使用Ajax进行发布请求,但是我不知道如何通过get请求传递标头。
如果我为“ /”路由编写自己的Ajax get请求并传递标题,则“ app.get”会触发两次,因此页面无法正确呈现。
编辑: Ajax代码:
$.ajax({
url: "/",
type: "GET",
headers: {"authorization": localStorage.getItem('token')},
success: function() { ... }
});
编辑2: 更多代码和我想做的事情(就像我说的那样,我是新手,所以我不知道这是否是正确的方法):
Validate.js-处理页面上的登录和注册表格。
$(document).ready(function () {
$.ajax({
url: "/",
type: "GET",
headers: {"authorization": localStorage.getItem('token')},
success: function() { alert('Success!' + authHeader); }
});
$("#prijava").validate({
rules: {
email: {
required: true,
email: true,
},
password: {
required: true,
},
},
messages: {
email: {
required: "Vnesite email",
email: "Vnesite pravilni email",
},
password: {
required: "Vnesite geslo",
},
},
submitHandler: function (form) {
$.ajax({
type: "POST",
url: "/prijava",
data: $(form).serialize(),
success: function (token) {
$(form).html("<div id='message'>Prijava uspela</div>");
localStorage.setItem("token", token);
setTimeout(function () {
location.reload();
}, 0001);
},
statusCode: {
500: function (data) {
console.log(data.responseJSON);
if (!$("#message").length) {
$(form).append(
"<div class='text-center' id='message'>" +
data.responseJSON.error +
"</div>"
);
}
},
},
});
return false;
},
});
$("#registration").validate({
rules: {
email: {
required: true,
email: true,
},
password: {
required: true,
minlength: 8,
},
},
messages: {
email: {
required: "Vnesite email",
email: "Vnesite pravilni email",
},
password: {
required: "Vnesite geslo",
minlength: "Vnesite vsaj 8 znakov",
},
},
submitHandler: function (form) {
console.log($(form).serialize());
console.log(form);
console.log(JSON.stringify($(form).serialize()));
$.ajax({
type: "POST",
url: "/registracija",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
dataType: "json",
data: $(form).serialize(),
success: function (data) {
$(form).html("<div >Registracija uspela!</div>");
setTimeout(function () {
location.reload();
}, 0001);
},
statusCode: {
500: function (data) {
console.log(data.responseJSON);
if (!$("#message2").length) {
$(form).append(
"<div class='text-center' id='message2'>" +
data.responseJSON.error +
"</div>"
);
}
},
},
});
return false;
},
});
});
start.js:如果用户未登录,这将阻止用户启动。
$(document).ready(function () {
$("#startButton").on("click", function btnClick() {
$.ajax({
method: "GET",
url: "/start",
headers: {"authorization": localStorage.getItem('token')},
success: function (data) {
if(data == false){
$("#modalPrijava").modal("show")
}
else if(data == true){
window.location.href = "/bubblesort";
}
},
fail: function (err) {
console.log(err)
}
});
});
});
index.js的更多内容-处理登录验证。
app.get("/start", function (req, res) {
VefiryLogin(req,res);
});
function VefiryLogin(req,res = null){
return jwt.verify(req.headers["authorization"], SECRET_PW, function (
err,
decoded
) {
if (err) {
console.log("error - not logged");
console.log(err);
SendIfNotNull(res,false);
return false;
} else {
console.log("no error");
console.log(decoded._id);
user = userModel.findById(decoded._id);
if (user) {
SendIfNotNull(res,true);
return true;
} else {
console.log("no user with this id");
SendIfNotNull(res,false);
return false;
}
}
});
}
function SendIfNotNull(res,value){
if(res != null){
res.send(value);
}
}
algoritmika.ejs-如果登录或不登录,则显示不同的内容
<% if(logged === false){ %>
...
<% } else if(logged === true){ %>
...
<% } %>