使用 PHP API 进行 FB.login

2023-12-02

我已经设置了一个 Canvas 页面,单击表单提交按钮即可实现 FB.login。在以下请求期间,它尝试通过 $facebook->api('/me') (来自 Github 的最新 API 版本)访问用户数据。它可以在 Firefox 和 Chrome 中工作,但不能在 Safari 和 IE 中工作,在这些情况下 API 会失败并显示“需要身份验证令牌”。有人已经遇到过这个问题或者知道可能导致这个问题的原因吗?

BR菲利普

edit:

我在表单提交按钮的单击事件中调用 FB.login:

$('.form-submit', this).click(function() {
  FB.getLoginStatus(function(response) {
    if (response.session) {
      form.submit();
    } else {
      FB.login(function(response) {
        if(response.session && (permissions == '' || response.perms)) {
          form.submit();
        }
        else {
        }
      },{perms:permissions});
    }
  });
  return false;
});

在服务器端简单地构造 php-api 对象并尝试获取用户数据:

$facebook = new Facebook(array(
  'appId' => $appid,
  'secret' => $appsecret,
  'cookie' => TRUE,
));
if ($facebook) {
  try {
    $me = $api->api('/me');
  }
  catch (Exception $exc) {
    // Failure in Safari and IE due to invalid auth token
  }
}

signed_request 在隐藏的表单元素内传递。


我遇到了同样的问题,我在下面提供了一个解决方案。

我相信发生这种情况的原因是因为在 Javascript 登录尝试中,您的服务器永远不会收到任何访问令牌。 Javascript 仅在您的浏览器和 Facebook.com 之间传递数据,因此您的服务器不知道身份验证状态是什么。您的服务器仅在页面刷新时才会收到新的访问令牌;这是 Facebook 交出访问令牌的地方。

这是我的解决方案。 通过 FB.login 成功登录后,您将收到响应对象,其中包含一个 access_token。您所需要做的就是以某种方式将此访问令牌传递给您的脚本。这是一个例子:

// Hold the access token
var js_access_token = "";

// Connect to facebook
FB.login(function(response) {
  if (response.session) {
    if (response.perms) {
      // user is logged in and granted some permissions.
      // Save the access token
      js_access_token = response.session.access_token;
      // Do stuff on login
    }
  }
});

然后,您可以将访问令牌与任何请求一起包含在内。我选择了一个ajax示例。

// Communication back to server.
$.ajax({
  url: 'myurl.php',
  data: {
    js_access_token: js_access_token // Including the js_access_token
  },
  success: function(data) {
    console.log(data);
 }
});

在你的 PHP 中,你需要有如下所示的东西:

$facebook = new Facebook(array(
  'appId' => $appid,
  'secret' => $appsecret,
  'cookie' => TRUE,
));
if ($facebook) {

  // If we get the access token from javascript use it instead
  if (isset($_REQUEST['js_access_token']) && $_REQUEST['js_access_token']) {
    $facebook->setAccessToken($_REQUEST['js_access_token']);
  }

  try {
    $me = $api->api('/me');
  }
  catch (Exception $exc) {
    // Failure in Safari and IE due to invalid auth token
  }
}

希望这可以帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP API 进行 FB.login 的相关文章

  • “为什么”脚本不打印任何内容? [复制]

    这个问题在这里已经有答案了 当我运行以下脚本时 没有打印任何内容 为什么会这样呢 echo var gt 它回显 无 因为您的浏览器无法理解
  • header() 错误未在 php 中显示

    我写了一个PHP程序 我用session start and header 函数 我知道在向客户端发送任何内容之前应该使用此函数 没关系 但是为了测试 我向客户端发送了一条测试消息echo test 在使用 header 之前 但我没有收到
  • 如何将自定义类型数组传递给 Postgres 函数

    我有一个自定义类型 CREATE TYPE mytype as id uuid amount numeric 13 4 我想将它传递给具有以下签名的函数 CREATE FUNCTION myschema myfunction id uuid
  • 通过jquery传递搜索参数

    我有一个表单 如果用户输入搜索查询 其参数应通过 jquery 传递 并在获取结果后将结果加载到 div 容器中 由于我不太熟悉 jquery 我该怎么做 html currently the data is being displayed
  • PHP上传文件产生错误代码4。为什么?

    HTML
  • 如何验证使用 php 上传的文件不包含可执行二进制文件?

    使用简单的 Firefox 插件 黑客可以更改他们想要上传的任何文件的 MIME 类型 绕过文件类型检查器 然后 黑客可以使用 GIMP 等程序将 php 脚本嵌入到图像 音频或任何其他文件的二进制数据中 我该如何检查并防止这种情况发生 您
  • PHP 如果不存在,则从字符串中删除 ','

    我正在运行这段代码 stmt pdo conn gt prepare SELECT from admin where support emails support emails and logged logged and disabled
  • CSS 无法与 CodeIgniter 一起使用

    这是我的 CI 代码的一部分 class page extends CI Controller var Page public function construct parent construct this gt Page 1 this
  • 通过 AJAX 发送 XML

    我在 jQuery 中创建了一个 xml 文档 如下所示 var xmlDocument
  • DOMPDF - 未找到“字体”类

    我正在尝试通过命令行添加字体 每次我尝试都会收到以下错误 Fatal error Class Font not found in home scripts public html MarketingPalv2 load font php o
  • PHP mkdir() 和 fopen() 不起作用 - 权限问题? umask问题?

    以下 PHP 脚本无法创建目录 它也将无法创建文件 当目录已经存在时 ini set error reporting E ALL define ABSPATH SERVER DOCUMENT ROOT echo ABSPATH br br
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • Yii 查询时对相关模型的限制

    我遇到了极限问题 我正在使用的代码如下 model PostCategory model record model gt with array posts gt array order gt posts createTime DESC li
  • PHP 时间间隔

    我正在寻找一个看起来应该非常简单的解决方案 但似乎我不能在这里找到任何好的答案 而且我自己似乎无法让它发挥作用 我正在寻找的是设置开始时间 结束时间 然后迭代给定时间间隔之间的一组时间 例如 上午 9 00 下午 5 00 是开始时间 这些
  • Laravel - 覆盖模型 ID

    我正在开发电子书管理系统 我使用 UUID 而不是自动递增整数主键 它工作得很好 protected static function boot parent boot static creating function model model
  • 图像创建从jpeg() PHP

    我正在使用 imagecreatefromjpeg 函数合并两张图片 现在我面临的问题是 当我使用服务器中的图片时 它工作正常 而当我使用其他网站的图片时 它不起作用 例如 当我使用这个 PHP 文件时http coolfbapps in
  • PHP 文件服务脚本:下载不可靠?

    这篇文章最初是关于 ServerFault 的一个问题 https serverfault com questions 131156 user receiving partial downloads https serverfault co
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • 禁用/启用用户访问/下载,但允许 php 编辑 - 使用 chown 和 chmod

    我想 move uploaded files到某个文件夹 比方说http localhost myproject protected 并且 PHP 应该能够rm mv cp 里面的一切protected 例如 启用 禁用用户对任何文件的访问
  • 如何获取 URL 中未知的 $_GET 值的数组?

    我正在使用一个在线购物车 它接受订购的商品并通过 URL 将其唯一 ID 传递到 process php 页面 所以 URL 看起来像这样 process php code 1 231 code 2 532 code 3 342 Anoth

随机推荐

  • 使用unity c#中的脚本更改UI图像

    我想改变UI image以随机顺序 我有一个游戏对象用户界面 画布 含有图片组件它有空图像最初 我附加了一个脚本 游戏对象 来在运行时更改图像 using UnityEngine using System Collections using
  • 调用 Delphi DLL 的意外线程行为

    继续我的另一个问题 如何将内存流从我的应用程序传递到 DLL 或从 DLL 检索内存流 我已经使用 DLL 编写了IStream作为输入 输出 该DLL使用IXMLDocument 起初我认为这与以下问题有关 测试了一下 在主 UI 中运行
  • 不同的gdb寄存器名称

    我正在学习汇编 这是我的问题 当我使用 gdb 时 我看到具有以下名称的寄存器 Dump of assembler code for function return input 0x000000000040053d lt 0 gt push
  • ChartJS v.2 上的圆角 - 条形图(带有负值)

    我正在设计一些 Chartjs 条形图 这些图表需要在条形值 而不是其底部 处进行圆角 在大多数情况下 这意味着条形图顶部的圆角 但是也存在条形图具有负值的情况 我在这里使用了答案 如何为 Bar Chart js v2 创建圆角条 由乔丹
  • 使用 jquery 从 url 获取 url 变量以形成表单

    我有一个 html 表单 只显示价格 但不向服务器提交任何内容 现在效果很好 如何添加仅从 url 变量运行此表单的功能 这样如果您使用 url 变量进入此页面 则不必单击提交按钮 像这样的东西 www my domain com form
  • 如何在 Windows 上的 AppServ 上启用 PDO?

    我第一次尝试使用 PDO 创建一个应用程序 当我 try db new PDO mysql host localhost dbname DBname user pass catch PDOException e echo div class
  • 如何将图像/数组分成块?

    我想知道是否可以将图像分成块 例如 8x8 块 64 pixels per block 并对每个块执行直方图函数并将结果保存到新图像中而不是单独的图像中 def apply histogram block h b np histogram
  • Azure SSL 证书

    我在将 SSL 证书上传到 Azure 时遇到问题 我有一份来自 GoDaddy 的高级证书 该证书去年一直在 IIS 中运行 当我们迁移到 Azure 时 我将其导出到 PFX 转到 Azure 将其添加到我的 Web 应用程序 并收到以
  • 从自己的网络服务器下载 apk

    我在从我自己的网络服务器下载 Android 应用程序时遇到问题 首先 我使用 javascript 发送 html 内容 要求 Android 手机打开我的下载链接 Android 手机收到此 javascript 将打开下载 URL 在
  • 如何在 Bootstrap 3 中使用固定标题(导航栏)向下滚动表格行时将表格标题(thead)固定在顶部?

    引导布局fixed navbar 表格中有很多行 Issue 当我滚动页面导航栏时 它会在那里 因为它是固定的 当我滚动更多时 我希望表头固定在导航栏下 并且表 表体 的内容在没有滚动条的情况下滚动 像这样的东西 Codepen 小提琴 引
  • 禁用 Word 2010 中的“另存为”按钮

    我有以下代码 应该禁用 Word 2010 中的 另存为 按钮 下面的方法正在Document Startup event private void DisableSaveAsButton Object MenuBar 40 Object
  • tkinter 如何将小部件向右对齐,而与左侧小部件的长度无关?

    我想将条目小部件向右对齐 而与左侧标签的宽度无关 ID 标题的宽度应该不重要 无论标题的宽度是多少 条目小部件都应该对齐 这是我的代码 import tkinter as tk from tkinter import ttk root tk
  • 如何在Android中将两个音频文件合并为一个[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想合并两个音频文件 A音频文件 B音频文件 AB音频文件 经过一番搜索后 我认为以下步骤会起作用 使用 AudioTrack 从音频文件中解码 PCM 结合PCM 上述步骤是否正确 如果
  • Facebook 嵌入视频与 iframe 无法正常工作

    我们使用 iframe 在我们的网站中嵌入 Facebook 视频 之前工作正常 但从最近几天开始 网站无法加载视频 我们也尝试过使用简单的网页 但没有成功 下面是我们正在使用的代码 如果有人可以提供快速帮助 请告诉我 只需使用此链接 这对
  • 有效地替换字符串中的所有重音字符?

    为了一个穷人的实施near 客户端的排序规则正确排序我需要一个 JavaScript 函数来实现高效的字符串中的单个字符替换 这就是我的意思 请注意 这适用于德语文本 其他语言的排序不同 native sorting gets it wro
  • Jstree:dblclick 绑定参数数据未定义

    我尝试使用好的库jstree但我有一些奇怪的问题dblclick捆绑 这是我的代码 basic html jstree themes url http mywork shinframework shinfw themes redmond c
  • 嵌套 INotifyPropertyChanged 类不起作用

    得到了一些代码 得到了意想不到的结果 如果我用 Myclass 替换嵌套类 那就没有问题了 我想念什么 我是否绑定文本 到其他控件 或绑定图像并不重要 xaml代码
  • Android:是否可以在屏幕上同时创建底部和顶部选项卡?

    我想知道是否可以在顶部和底部设置不同的选项卡 单击时会导致不同的活动 谷歌搜索但没有找到任何相关内容 Thanks Android 的好处是几乎所有你想做的事情都可以实现 如果我们要更改您的 XML 我们会将其更改为以下内容
  • 用于淡入和淡出视图的 Angular 4 动画

    我只是希望视图在路线更改时淡入和淡出 我似乎已经正确设置了组件 但我认为需要使动画语法正确 这是我目前的动画尝试 我将此动画导入到我的组件中 import trigger state animate style transition fro
  • 使用 PHP API 进行 FB.login

    我已经设置了一个 Canvas 页面 单击表单提交按钮即可实现 FB login 在以下请求期间 它尝试通过 facebook gt api me 来自 Github 的最新 API 版本 访问用户数据 它可以在 Firefox 和 Chr