最巧妙的解析Facebook OAuth 2访问令牌字符串的方法

chi*_*ior 6 regex

这有点晚了,但我对自己没有提出更优雅的东西感到失望.任何人都有更好的方法来做到这一点......

当您将OAuth代码传递给Facebook时,它会使用包含值access_tokenexpires值的查询字符串进行响应.

access_token=121843224510409|2.V_ei_d_rbJt5iS9Jfjk8_A__.3600.1273741200-569255561|TxQrqFKhiXm40VXVE1OBUtZc3Ks.&expires=4554
Run Code Online (Sandbox Code Playgroud)

虽然如果您请求脱机访问权限,则没有expires,字符串如下所示:

access_token=121843224510409|2.V_ei_d_rbJt5iS9Jfjk8_A__.3600.1273741200-569255561|TxQrqFKhiXm40VXVE1OBUtZc3Ks.
Run Code Online (Sandbox Code Playgroud)

我试图编写一个足以满足任何一个条件的正则表达式.没有骰子.所以我最终得到了一些非常丑陋的Ruby:

s = s.split("=")
@oauth = {}
if s.length == 3
  @oauth[:access_token] = s[1][0, s[1].length - 8]
  @oauth[:expires] = s[2]
else
  @oauth[:access_token] = s[1]
end
Run Code Online (Sandbox Code Playgroud)

我知道必须有更好的方法!

pol*_*nts 3

如果格式严格,则使用此正则表达式:

access_token=([^&]+)(?:&expires=(.*))?
Run Code Online (Sandbox Code Playgroud)

那么access_token值就在 中\1,并且expires,如果有的话,将在 中\2