Php Facebook身份验证实现
我正在做一个完全使用facebook身份验证的项目(不存在自定义身份验证实现)。Project使用PHP编写服务器端脚本。我四处寻找实现快速安全的身份验证机制,但找不到关于这个主题的任何详细描述。Facebook的文档很弱,只提供基本信息 哪种身份验证方法合适?有一个Javascript SDK和PHP SDK。据我所知,我必须使用Javascript SDK进行登录,然后使用PHP SDK检查我的数据库以验证凭据。但是在PHPSDK中使用GraphAPI速度很慢。是否有更好的方法验证会话Php Facebook身份验证实现,php,authentication,facebook-graph-api,facebook-php-sdk,facebook-javascript-sdk,Php,Authentication,Facebook Graph Api,Facebook Php Sdk,Facebook Javascript Sdk,我正在做一个完全使用facebook身份验证的项目(不存在自定义身份验证实现)。Project使用PHP编写服务器端脚本。我四处寻找实现快速安全的身份验证机制,但找不到关于这个主题的任何详细描述。Facebook的文档很弱,只提供基本信息 哪种身份验证方法合适?有一个Javascript SDK和PHP SDK。据我所知,我必须使用Javascript SDK进行登录,然后使用PHP SDK检查我的数据库以验证凭据。但是在PHPSDK中使用GraphAPI速度很慢。是否有更好的方法验证会话 我是
我是否需要检查每个请求的会话服务器端(PHP-SDK)?回答我自己的问题: 我使用Javascript SDK检查facebook身份验证是否可用
- 如果fb身份验证正常,而我的应用程序没有经过身份验证,我会向用户提供一份预填的facebook注册表
- 如果fb身份验证不正常,我会显示一个facebook登录按钮
我找不到响应速度更快的更好的解决方案。您可以使用其中一个或两个 您可以使用PHPSDK生成相关的URL以将用户发送到。只要在一个链接上摇动它。 或者您可以使用Javascript使Facebook成为默认登录按钮 之后,您可以使用其中一个来维护和验证会话 我通常使用PHP与oAuth键一起进行grunt工作,并使用JavaScript SDK制作漂亮的Facebook按钮和一些不太重要的用于会话监视的图形调用 任何涉及大量或多个图形调用的内容,我都会推送到PHP 但你可以灵活地做你想做的事。登录时不必使用JavaScript SDK 是否要验证每个页面加载,取决于您自己
我倾向于使用javascriptsdk来处理它,如果会话死机,我喜欢Berk。调用页面重定向到注销脚本。从最新版本开始,PHP和JS SDK现在都可以访问相同的用户会话(使用JS或PHP登录[而不必同时执行这两个操作])。查看更详细的解释和示例
如果您担心安全性,也许可以使用将会话cookie设置为提前过期。我认为您不需要实现SDK 1,您需要获得用户的权限才能访问他/她的数据。所以你需要将他们重定向到Facebook。php中只有很少(3-5)行代码
https://graph.facebook.com/oauth/authorize?
client_id=YOUR_APP_ID&scope=email&redirect_uri=APP_URL
2、当用户返回您的站点时,请提供$\u GET['code']
http://YOUR_URL?code=A_CODE_GENERATED_BY_SERVER
3.你必须通过Facebook get request解码此代码,并获得access_令牌
https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&
client_secret=YOUR_APP_SECRET&code=THE_CODE_FROM_ABOVE
3、在您拥有访问令牌后,只需根据需要运行a/me?访问令牌GET请求,以检查用户是否仍然存在
4、你可以储存Facebook ID
我认为这是最快的方法。据我所知,javascript sdk使用弹出窗口,这在大多数浏览器中都会被阻止
这个流程在这里已经足够详细了:与我见过的任何其他方法相比,我最终为我的应用程序所做的工作都非常简单,速度也相对较快
我已经在我的应用程序上这样做了,在大多数情况下,这意味着我不必向FB查询访问令牌的有效性,也不必在每个页面视图上不断获取它。我们的目标是减少应用程序的延迟,但Facebook是延迟的最大来源,这样做可以大大减少延迟。首先,提醒你您不仅需要保存访问令牌,而且理想情况下,您希望将用户的facebook uid与访问令牌一起保存。这是因为您通常需要在API调用中包含uid与访问令牌 第二,来自 注意:如果应用程序未请求脱机访问权限, 访问令牌是有时间限制的。有时间限制的访问令牌也可以 当用户注销Facebook时无效。如果应用程序 已从用户获得脱机访问权限,访问令牌 没有到期日。但是
// Suppose we are try to publish a status from our fb app
// $access_token hold the user access_token, which you saved into your database
// $uid hold the user facebook uid, which you saved into your database
$proxy = new Proxy;
// This is equal with perform regular HTTP POST request with cURL
$api_call = $proxy->http('post','https://graph.facebook.com/'.$uid.'/feed', array('access_token' => $access_token,'message' => 'foo'));
// Now we can validate...
// If the API success, it will be returned a post id, with json format
// if not, it will be outputing json like...
// "{"error":{"type":"OAuthException","message":"Invalid OAuth access token."}}"
// so...
$result = (array) json_decode($api_call);
if(array_key_exists('error', $result))
{
// Here you can perform an oAuth authentification, to get fresh access_token and update your database
// ...
// After it done, process the previous api call with valid access_token
$proxy->http('post','https://graph.facebook.com/'.$uid.'/feed', array('access_token' => $access_token,'message' => 'foo'));
}