我正在尝试解码来自Facebook的签名请求。我尝试使用javascript使用下面的代码,但我不确定用于解码然后解析JSON响应的函数。我的Response对象是signed_request,它包含用户个人资料信息,如姓名,性别,电子邮件等。 我想做类似这样的页面在php中显示: (转到解析签名请求的部分) https://developers.facebook.com/docs/facebook-login/using-login-with-games/
<script>
$(document).ready(function () {
var signedRequest = $("h2").html();
var data = signedRequest.split('.')[1];
data = JSON.parse(data);
name = data.name;
console.log(name);
});
</script>
<body>
<form id="form1" runat="server">
<div>
<% string name1 = Request.Params["signed_request"];%>
<h2><%= name1 %></h2>
</div>
</form>
</body>
答案 0 :(得分:1)
根据facebook,我们需要:
- 将已签名的请求分为两部分,并用“。”表示。字符(例如238fsdfsd.oijdoifjsidf899)
- 从base64url解码第一部分-编码签名
- 从base64url解码第二部分-有效负载,然后解码生成的JSON对象
在JavaScript中解析base64url的一种方法是window.atob:
FB.getLoginStatus(res => {
console.log(res)
const parts = res.authResponse.signedRequest.split('.')
const signature = window.atob(parts[0])
const payload = window.atob(parts[1])
console.log(signature, JSON.parse(payload))
});
答案 1 :(得分:0)
签名请求是base64编码的(url安全的版本),你可以按照这里的php描述 - https://developers.facebook.com/docs/facebook-login/using-login-with-games/
如果您非常感兴趣,可以通过http://connect.facebook.net/en_US/all/debug.js搜索“sdk.SignedRequest”来了解如何在JS SDK中完成此操作。