这有点晚了,但我对自己没有提出更优雅的东西感到失望.任何人都有更好的方法来做到这一点......
当您将OAuth代码传递给Facebook时,它会使用包含值access_token和expires值的查询字符串进行响应.
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)
我知道必须有更好的方法!
如果格式严格,则使用此正则表达式:
access_token=([^&]+)(?:&expires=(.*))?
Run Code Online (Sandbox Code Playgroud)
那么access_token值就在 中\1,并且expires,如果有的话,将在 中\2。