小编str*_*tek的帖子

在Fabric.js中反序列化JSON对象

我正在使用fabricjs开发协作白板.当用户创建新的结构对象时,我将其序列化并将其发送给所有其他用户.

var rect = new fabric.Rect();
canvas.add(rect);  
socket.emit("newObject", JSON.stringify(rect)); // sends the object to other users
Run Code Online (Sandbox Code Playgroud)

当这些用户收到序列化对象时,应将其反序列化并添加到其画布中.做这个的最好方式是什么?我无法找到一个反序列化单个对象的函数,只有整个画布(loadFromJSON),所以我实现了一个不优雅的解决方案:

function drawRoomObjects(roomObjects){
  var canvasString = "{\"objects\":[";
  for(var roomObjectKey in roomObjects){
    canvasString += roomObjects[roomObjectKey];
  }
  canvasString += "], \"background\":\"\"}";
  var tmpCanvas = new fabric.Canvas();
  tmpCanvas.loadFromJSON(canvasString);
  for(var k in tmpCanvas.getObjects()) {
    canvas.add(tmpCanvas._objects[k]);
  }
  canvas.renderAll();
}
Run Code Online (Sandbox Code Playgroud)

有什么建议可以做更好的方法吗?

javascript canvas fabricjs

12
推荐指数
1
解决办法
6364
查看次数

Firebase如何发送有效载荷包含下划线字符的JWT令牌?

总结问题

  • 带下划线字符的JWT令牌的有效载荷是否有效?据我了解,它不能,因为它必须是base64编码的。
  • 如果不是,为什么firebase有时会生成这样的令牌,为什么firebase Admin SDK可以对其进行验证和解码?
  • 如果是,请在哪里记录,以及如何在客户端上的javascript中读取有效负载(无需验证),因为atob这样的字符串将失败。

一些背景

我正在使用Firebase进行身份验证。我想读取(而不是验证)ID令牌的有效负载。我需要它来显示/隐藏UI中的内容,并且我使用了firebase文档中描述的方法。

但是,在某些情况下(我只有在使用自己的Facebook帐户登录时才遇到这种情况),令牌的有效载荷包含_,因此不会被base64解码。因此,调用atob它时出现错误。

在此处输入图片说明

这怎么可能?通过阅读JWT文档,我的理解是有效负载必须使用base64编码。除下划线外,所有字符实际上都是有效的base64字符。

但是,当我将其发送到firebase函数并对其进行调用时,该令牌已成功验证并解码admin.auth().verifyIdToken(idToken)

javascript jwt firebase

1
推荐指数
1
解决办法
456
查看次数

标签 统计

javascript ×2

canvas ×1

fabricjs ×1

firebase ×1

jwt ×1