如何在FB信使中授权用户访问网页,而无需登录



我正在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 安全标头混合使用,它应该是非常安全的。

最新更新