gpt4 book ai didi

node.js - JsonWebToken |获取请求验证

转载 作者:太空宇宙 更新时间:2023-11-03 22:51:17 25 4
gpt4 key购买 nike

我目前正在尝试构建一个基于 token 的简单登录系统。我有一个简单的登录表单,可将​​凭据发送到服务器。创建 token 也对我有用。

如果用户登录并手动打开用户仪表板链接,服务器将收到获取请求。那么我该如何验证 token 呢?我找不到在 get-event 中访问它的方法。

token 创建:

var token = jwt.sign({ Username: 'test' }, app.get('tokenPass'));

// This token is either send as response or via emitting.

在客户端我将其存储为

$window.sessionStorage = token;

我的问题:

app.get('/dashboard', function(req, res) {
// req is not including the token
// I cant deliver the dashboard without
// validating that the requesting user
// is logged in.
});

我想阻止使用cookie(这就是我选择token-auth的原因)。另外,我希望能够从简单的发出中访问 token (如果它存储在 SessionStorage 中,这是可能的)。

这是一个私有(private)项目,因此如果需要,我不介意获得替代方法的想法。我感谢这里的每一个帮助。

非常感谢!

根据评论进行编辑:

服务器部分

// Simply tried sending a token for testing purposes
// After a page-refresh I expected being able accessing it
router.get('/', auth, function(req, res) {
// Sending the index.html
res.sendFile(exp.get('views') + '/index.html');

// Token is never delivered
console.log('BODY: ' + req.body);
console.log('BODY: ' + req.query);
console.log('BODY: ' + req.query.token);
console.log('BODY: ' + req.headers['x-access-token']);

// New token is send here
var token = jwt.sign({ username: 'testUser' }, 'SECRET');
req.io.emit('token', { token: token });
});

客户端部分

<script>
$(function (){
var socket = io();

// Incoming token get sets to sessionStorage
socket.on('token', function(data) {
// Is raising and showing token.
alert('token: ' + data.token);
$window.sessionStorage.accessToken = data.token;
$window.sessionStorage = data.token;
});

$('#logout').click(function (err){
sessionStorage.token = null;
});
});
</script>

主体的控制台输出是:

BODY: undefined
BODY: [object Object]
BODY: undefined
BODY: undefined
<小时/>

我对 node.js 和 webcoding 本身非常陌生。所以请耐心等待我。

最佳答案

将 json Web token 从客户端发送到服务器(当然不使用 session )的最著名技术是在请求 header 中发送它们。

当您在客户端进行 ajax 调用时,添加一个 header ,例如:

$.ajax({
...
beforeSend: function(request) {
request.setRequestHeader("Access-Token", jsonWebToken);
}
...
});

然后您可以在中间件中验证 json Web token ,例如:

const verifyMiddleware = function(req, res, next){
const jsonWebToken = req.headers['Access-Token'];
jwt.verify(jsonWebToken, function(err, user){
if(err) {
return res.status(401).send('Bad Auth');
} else {
req.user = user;
next();
}
}
}

您可以从应用程序中调用中间件,例如:

app.get('/dashboard', verifyMiddleware, function(req, res) {
// req is not including the token
// I cant deliver the dashboard without
// validating that the requesting user
// is logged in.
});

关于node.js - JsonWebToken |获取请求验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42972943/

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