gpt4 book ai didi

Facebook PHP SDK - getLoginUrl() - 状态值

转载 作者:行者123 更新时间:2023-11-30 05:22:35 27 4
gpt4 key购买 nike

我正在使用 PHP SDK getLoginUrl() 函数,它可以完美地让用户登录。一旦用户被重定向回我的页面,URL 可以有两种形式,请参见以下链接第 3 小节:http://developers.facebook.com/docs/authentication/server-side/

返回 URL 的一部分是一个 ?state= 值。该值应该用于防止跨站请求伪造:http://developers.facebook.com/docs/reference/dialogs/oauth/

虽然,使用 getLoginUrl() 方法我永远无法设置状态值,因为它不是参数之一:http://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/

那么我如何利用状态值让用户登录 facebook 并防止 CSRF?

最佳答案

So how can I utilize the state-value to log a user into facebook and prevent CSRF?

这由 Facebook PHP SDK 自动处理。如果您要编写您自己对 Facebook 的 API 调用,则需要提交 state根据 Facebook 的 OAuth 手动(如果需要)文档。

当您使用 BaseFacebook::getLoginUrl() 创建登录 URL 时,该函数做的第一件事是建立 CSRF token 状态1,它使用 PHP 的核心 mt_rand() 创建一个散列。 , uniqid()md5()函数并将该值存储为 session 变量。

当用户被重定向回您的页面时,FBSDK 检查是否提交了 state匹配 state session 中的值。如果值确实匹配,stateFacebook 中清除对象和 session ,所以所有后续 getLoginUrl()请求会得到一个新的 state变量。2

理论上您可以使用自己的 state FBSDK 的值写入 fb_<em><your_app_id></em>_state构建 Facebook 之前的 session 变量-object,作为 BaseFacebook的构造函数和 establishCSRFTokenState()两者都检查 state 是否已经存在于 session 中。

但这可能会带来不必要的复杂性。


  1. 参见 BaseFacebook::establishCSRFTokenState()
  2. 参见 BaseFacebook::getCode()

关于Facebook PHP SDK - getLoginUrl() - 状态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10358752/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com