我正在FB信使中构建一个聊天机器人,用于保存用户个人资料数据,食物和卡路里消耗。我正在使用Node/Express/MongoDB作为后端,并希望用户能够在聊天中打开带有链接的个人仪表板页面。因此,该URL类似于 www.myapp.com/:id 其中:id是个人密钥。
我遇到的问题是,如何只有属于此页面和数据的用户才能打开此页面而无需登录?通常,您会访问网站,登录并能够看到该页面,但这不是我在聊天机器人中想要的步骤。我希望用户只在聊天中打开页面,无论是打开浏览器选项卡还是本机 Web 视图。关于如何实现这一目标的任何建议?
要验证页面上的用户是否是您希望该页面针对的Facebook用户,请将FB Messenger扩展添加到该页面。
单击机器人中的 Web 视图时,Messenger 扩展将能够告诉他们以谁登录,并允许您对该信息执行任何操作。在您的情况下,检查用户 ID 是否与机器人在 url 中传递的用户 ID 匹配。有很多方法可以检查这一点,例如拆分查询字符串,但我坚持使用您问题中的示例路由。
在仪表板页面上使用以下方法。下面将与FB核实登录用户是谁,如果它与他们关注的链接的ID不匹配,则通过重定向拒绝他们访问。
<script>
MessengerExtensions.getContext(<YOUR-APP-ID>,
function success(thread_context){
// User ID was successfully obtained.
var psid = thread_context.psid;
// Grab the user id from your url (assumes your url is /<USER_ID>)
var loc = window.location.pathname.replace(/^/|/$/g, '');
if (psid !=== loc) {
window.location.replace("http://YOUR_DOMAIN.com/error")
}
}, function error(err, errorMessage) {
// Error handling code
});
</script>
有关使用信使扩展获取用户 ID 的文档
试试这个:打开 Messenger,然后打开 DevsConsole 并转到"网络"选项卡。现在粘贴您的链接并单击它。在"网络"选项卡中,打开单击发出的请求详细信息。在"表单数据"下,您应该看到以下内容:
q:[{"user":<your_fb_id>,...
您可以使用此 ID 对应用中的用户进行身份验证 - 只需以某种方式将其与应用中的授权用户配对即可。这只是我脑海中的第一个想法,如果您将其与 CORS 安全标头混合使用,它应该是非常安全的。