📜  为什么将 #_=_ 附加到重定向 URI?护照 facebook - Javascript (1)

📅  最后修改于: 2023-12-03 15:21:36.927000             🧑  作者: Mango

为什么将 #= 附加到重定向 URI? 护照 Facebook - Javascript

当使用Facebook的JavaScript SDK进行用户登录时,会进行重定向到授权页面,完成授权后会返回到指定的 URI 。然而,在重定向 URI 中经常会附加 #= ,一般情况下,它看起来像是一个没有意义的字符串。那么,这个字符串是什么意思?为什么要将它附加到重定向 URI 中呢?

为什么要将 #= 附加到重定向 URI

在使用Facebook的JavaScript SDK进行用户登录时,我们需要指定一个重定向URI,授权成功后,Facebook会将用户重定向到该URI并携带授权码。但是,由于浏览器的限制,我们无法在重定向的同时传递数据给前端 JS,因此,Facebook SDK 采用了一个 hack 的方式,将 #= 附加到重定向 URI 后,前端就能通过 window.location.hash 获取到这个值,以此处理授权码。

#= 的含义

首先,我们需要知道 # 是 URI 中的锚点标记,用于指向不同的片段。而 = 表示等于号(=)的转义字符格式。 因此,#= 实际上是一个带有锚点的 URI 片段。在某些情况下,它可能作为一个占位符使用,因为它本身没有任何特别的含义。在这里,它的含义主要是为了在前端 JS 中拿到授权码。

如何在前端 JS 中获取授权码

在重定向 URI 中附加 #= 后,前端就可以通过 window.location.hash 获取到这个值。一种常见的做法是使用正则表达式去除 #= ,例如:

if (window.location.hash === '#_=_') {
  window.location.hash = '';
}
结论

虽然 #= 看起来很神秘,但它实际上只是一个用于前端 JS 获取授权码的 hack。Facebook 的 JavaScript SDK 使用该 hack 的原因是因为浏览器限制无法在重定向的同时传递数据给前端 JS。虽然它并不是一个好的解决方案,但作为一种权宜之计,它确实非常有效。