javascript - 如何在不登录的情况下授权用户访问 FB Messenger 中的网页?

标签 javascript node.js bots facebook-messenger

我正在 FB Messenger 中构建一个聊天机器人,用于保存用户个人资料数据、食物和卡路里消耗。我在后端使用 Node/Express/MongoDB,并希望用户能够使用链接在聊天中打开个人仪表板页面。因此该 URL 类似于 www.myapp.com/:id,其中 :id 是个人 key 。

我遇到的问题是只有属于该页面和数据的用户才能在不登录的情况下打开它?通常你会去一个网站,登录并能够看到页面,但这不是我想要的聊天机器人的步骤。我希望用户只需在聊天中打开页面,无论是打开浏览器选项卡还是 native webview。关于如何实现这一点有什么建议吗?

最佳答案

要验证页面上的用户是否是您希望该页面用于的 facebook 用户,请添加 FB Messenger Extensions到页面。

当您在您的 bot 中点击一个 webview 时,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>

关于 getting user id with Messenger Extensions 的文档

关于javascript - 如何在不登录的情况下授权用户访问 FB Messenger 中的网页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43875014/

相关文章:

javascript - FlowType 中可能有不兼容的别名?

node.js - 如何在 Express 应用程序中使用 DefinelyTyped 定义

python - TelegramBot,如何处理命令旁边的消息

javascript - 使用 JavaScript 防止电子邮件地址被机器人使用

python - 如何让 Discord 机器人在 on_message 中使用自定义表情符号响应消息

javascript - Express 服务器 404ing 所有来自索引的请求

javascript - 将可变长度子字符串替换为单个字符 JavaScript

javascript - 统一 div,以便调整窗口大小不会将它们分开

node.js - 使用 Mongoose 使用 arrayFilters 查找

node.js - 为什么 Google map 标记和信息窗口不居中?