我正在尝试使用jsonwebtoken,cookie解析器来在客户端中设置cookie和jQuery的授权中间件。
为此,我正在使用中间件来检查授权。
这是中间件
const jwt = require('jsonwebtoken')
module.exports = (req,res,next)=> {
try{
const token = req.headers.authorization.split("=")[1];
const decodedToken = jwt.verify(token, process.env.JWT_KEY)
req.userData = decodedToken;
next();
} catch(error){
return res.status(401).json({
message: "Auth failed"
})
}
}
在我的API中,我正在创建并发送令牌,如下所示:
const token = jwt.sign({
email: user[0].email,
userId: user[0]._id
},
process.env.JWT_KEY, {
expiresIn: "1h"
}
)
res.cookie('userToken', token)
res.render('index', {
movies: {}, token:token
});
在客户端中,我像这样发送回服务器:
var userToken = document.cookie;
// console.log(userToken)
$.ajax({
url: "/movies/add",
type: "GET",
beforeSend: function (xhr, settings) {
console.log(xhr)
xhr.setRequestHeader('Authorization', 'Bearer ' + userToken);
}
});
电影/添加路线正在接收请求,因为它正在打印“已输入”,但未重定向到电影/添加电影。我想念什么?
router.get('/add', checkAuth, function (req, res, next) {
console.log('it entered')
res.render('movies/addMovies', {
movies: {}
})
});
答案 0 :(得分:0)
您正在通过AJAX调用请求“页面”,并将HTML(res.render
)返回到JavaScript。
如果要导航到另一个屏幕,则应使用超链接或使用JavaScript(location.href
进行重定向。
答案 1 :(得分:0)
我已更改为:
$.ajax({
url: "/movies/add",
type: "GET",
data:{
'userToken':userToken
},
success: function(){
console.log('sim')
window.location.href = "/movies/add";
}
});
和服务器
const token = req.cookies.userToken
const decodedToken = jwt.verify(token, process.env.JWT_KEY)
现在可以了