首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SailsJS -将sails.io.js与JWT结合使用

SailsJS -将sails.io.js与JWT结合使用
EN

Stack Overflow用户
提问于 2015-05-07 15:06:05
回答 1查看 2K关注 0票数 7

我已经实现了一个AngularJS应用程序,通过websockets通过sails.io.js与Sails后端进行通信。

由于后端基本上是一个纯API,并且也将连接到其他应用程序,所以我试图完全禁用会话并使用JWT。

我已经设置了express-jwt,并且可以很好地使用常规的HTTP请求,但是当我通过sails.io.js发送请求时,什么都不会发生-- websocket请求一直挂在客户机上,服务器上也没有发生任何事情(具有“愚蠢”的日志级别)。

我尝试过修补sails.io.js以支持query parameter,在连接时,我从角发送令牌,但在最好的情况下,我得到了来自快递jwt的错误消息的响应,表示凭据丢失了……

我还看到了一些提示,即Sails中的socket.js需要用beforeConnect进行修改,我已经看到了socketio-jwt,但不知道在哪里以及如何插入sails。

是否有人实现了这一点,并且正在使用带有Sails和套接字的JWT?我很想知道该往哪个方向走:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-15 10:30:36

我意识到,我已经制定了一些政策,而且使用的是快递-jwt,这离我太远了,所以我不知道到底发生了什么。一旦我看了其他例子,我就发现我只需要检查websocket请求与常规请求有什么不同,我很快就找到了解决这个问题的方法。

所以:

  1. 在登录时设置令牌签名和发送
  2. 角获取令牌并保存到本地存储。
  3. 为HTTP请求创建一个拦截器来添加授权头和令牌
  4. 修正sails.io.js以转发通过选项提供的查询参数(如问题中所述)
  5. 使用sails.io.js连接时,发送令牌作为查询参数,即url + '?token=‘+令牌
  6. 在sails策略中,检查所有令牌组合,包括req.socket.handshake.query,如下所示: module.exports =函数(req,res,next) { var令牌;if (req.headers && req.headers.authorization) { var parts = req.headers.authorization.split(‘');if (parts.length == 2) { var parts= parts,凭证= parts1;if (/^Bearer$/i.test(Parts)){parts.length=凭证;}{返回res.json(401,{err:‘格式是授权:无记名令牌’});}} if (req.param(' token ')) { token = req.param('token');//我们从param中删除令牌,以避免干扰蓝图删除req.query.token;} // if连接来自套接字If (req.socket & req.socket.handshake && req.socket.handshake.query & req.socket.handshake.query.token) { token = req.socket.handshake.query.token;}req.socket.handshake.query.token{ sails.log(req.socket.handshake);返回res.json(401,{err:‘未找到授权头’});}JWTService.verifyToken(令牌,函数(err,令牌){ if (err) {返回res.json(401,{err:‘令牌无效’});}sails.log(‘令牌有效’);req.token =令牌;返回next();};

它工作得很好!:)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30104981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档