【发布时间】:2017-08-15 19:46:57
【问题描述】:
我目前正在尝试构建一个基于令牌的简单登录系统。我有一个简单的登录表单,可以将凭据发送到服务器。创建令牌也对我有用。
如果用户登录并手动打开用户仪表板链接,服务器将收到一个获取请求。那我该如何验证令牌呢?我找不到在 get-event 中访问它的方法。
令牌创建:
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 的原因)。我还希望能够从简单的发射中访问令牌(如果它存储在 SessionStorage 中,这是可能的)。
这是一个私人项目,所以如果需要,我不介意获得替代方法的想法。感谢这里的每一个帮助。
非常感谢!
根据 cmets 编辑:
服务器部分
// 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 和网络编码本身非常陌生。所以请耐心等待我。
【问题讨论】:
-
你如何创建你的令牌?你有任何用于创建它们的 npm 模块吗? (或)你以自己的方式做?
-
为
jwt添加了一个标签,因为我正在使用 jsonWebTokens。添加一些代码。 -
如何发送请求?
-
@DrakaSAN 检查我的编辑。贴出我目前得到的代码。
标签: node.js express socket.io jwt