【发布时间】:2014-03-30 02:07:56
【问题描述】:
我在我的网站上使用facebook authentication,每个页面的导航菜单中都有“使用 Facebook 登录”按钮。因此,用户应该能够通过 facebook 登录并一键返回到他们所在的页面。 Facebook 提供了 return_uri 参数,该参数在我的网站上设置为 /login/facebook,它处理所有针对 facebook API 的身份验证。但是,一旦我完成了这个逻辑并且我登录了用户,我需要知道他们最初在哪个页面上,以便我可以重定向他们。
我尝试将 return_uri 参数传递为:
http://example.com/login/facebook?local_redir=http://example.com/users/original/page
(当然,所有内容都带有问号,并且经过正确编码)所以当我收到回复时,我知道他们的原始页面是什么。当我尝试获取访问令牌时失败。我基本上需要一种方法来为 facebook 提供“传递”参数,但在这里我做不到。
【问题讨论】:
-
为什么尝试获取访问令牌时会失败?您是否在调用身份验证对话框和调用以交换
code以获取访问令牌时使用完全相同的 redirect_uri? -
@Igy,是的,它在抱怨“验证验证码时出错。请确保您的 redirect_uri 与您在 OAuth 对话请求中使用的相同”。但是,我已确保调用之间的 URL 相同。当我不将 local_redir 作为参数附加时,它可以工作。
-
我假设您正在使用 PHP SDK 来处理登录等内容?如果是这样,那么已经有一个会话 - 那么为什么不在用户单击您网站上某处的链接/按钮“使用 Facebook 登录”的位置时将 URL 存储到会话中的“原始页面” - 然后就使用从会话中读取的值完成 FB 登录后将它们重定向到该页面?这将避免在重定向 URI 中突然出现附加参数的任何问题,而 Facebook 似乎对此表示反对。
-
@CBroe,这会起作用,事实上这是我的备用计划。我试图避免使用会话。似乎应该有一种方法可以在没有会话的情况下做到这一点,但可能并不容易。
-
“当我不将 local_redir 作为参数附加时,它可以工作。” – 根据我读过的一些内容,Facebook 对 GET 参数可能会很讨厌有时。您是否尝试使用
http://example.com/login/facebook/local_redir/http://example.com/users/original/page或其他形式的重定向 URI,将所需参数作为 URL path 的一部分而不是作为查询字符串参数传递? (可能需要一些服务器端重写,否则才能使其正常工作。)