使用 FbConnect 从 Facebook 重定向回我的网站时,如何对我的网址进行编码或解码

问题描述 投票:0回答:2

自从我尝试解决这个问题以来,我已经在这里问过它,但没有得到任何答复,我一直在各种意义上搜索我的问题,但我就是做不到。 我只需要知道当我向 Facebook 发送我的 url 时如何获得有效的 url 我希望 Facebook 将我的用户重定向回来:

site_url(‘main/verification’)
(我正在使用 codeIgniter)

所以我的登录网址如下所示:

https://www.facebook.com/dialog/oauth?client_id=248650435198175.&.redirect_uri=http%.3A%.2F%.2Flocalhost%.2FSocialCart%.2Findex.php%.3F%.2Fmain%.2Fverification&state=004dc1ebe9e081b2222408434af7dbd5&scope=email

(删除所有%后的所有点)

一旦我点击链接,我就会被定向到 Facebook,但是随后,我会在浏览器中使用该 URL 重定向到我的主页(而不是主页面/验证页面):

http://localhost/SocialCart/index.php?%.2.Fmain%.2.Fverification&state=0e3ae6ca3e7869f618d65ad&code=AQCwwZUevy-SfeNLgUC55Rg0bi7noi_oczwt_2TmR-DobC8xc6STYIW82VLi23fzf9d-J5tdufdOLpc#_=_

好吧,我已经删除了那段长代码的一部分,但是你看我在

index.php?
之后得到了 %.2.F 而不是
/
并且 & 应该是? (我认为)

(去掉每%2和2F之间的点“.”)

请问我该如何解决?为什么我的redirectUrl 仅被浏览器部分解码?它似乎解码直到index.php,然后,它停止用“/”替换所有“%.2F”(在%之后再次没有意义) 我想我需要 url 重写或 urlencode() 函数,但事实是只有一半的 url 得到了很好的解释,其余的则不然。我现在真的不知道该怎么办..

我想我必须检查 getLoginUrl() 函数,它的函数负责检索将用户从 fb 重定向到我的网站的登录 url 部分(如果 url 编码良好,但我已经尝试了所有方法)似乎没有任何作用。

这是该函数(您可以在 php API 图表的任何 base_facebook.php 中找到该函数。):

  /**
   * Get a Login URL for use with redirects. By default, full page redirect is
   * assumed. If you are using the generated URL with a window.open() call in
   * JavaScript, you can pass in display=popup as part of the $params.
   *
   * The parameters:
   * - redirect_uri: the url to go to after a successful login
   * - scope: comma separated list of requested extended perms
   *
   * @param array $params Provide custom parameters
   * @return string The URL for the login flow
   */
  public function getLoginUrl($params=array()) {
    $this->establishCSRFTokenState();
    $currentUrl = $this->getCurrentUrl();

    // if 'scope' is passed as an array, convert to comma separated list
    $scopeParams = isset($params['scope']) ? $params['scope'] : null;
    if ($scopeParams && is_array($scopeParams)) {
      $params['scope'] = implode(',', $scopeParams);
    }

    return $this->getUrl(
      'www',
      'dialog/oauth',
      array_merge(array(
                    'client_id' => $this->getAppId(),
                    'redirect_uri' => site_url(), // possibly overwritten
                    'state' => $this->state),
                  $params));
  }

谢谢你

php facebook codeigniter facebook-graph-api facebook-php-sdk
2个回答
1
投票

不要对base_facebook.php进行任何更改 使用以下代码:

$params = array(
  'scope' => 'read_stream, friends_likes',
  'redirect_uri' => site_url(‘main/verification’)
);

$loginUrl = $facebook->getLoginUrl($params);

0
投票

您的登录网址是这样的:

https://www.facebook.com/dialog/oauth?client_id=248650435198175.&.redirect_uri=http%.3A%.2F%.2Flocalhost%.2FSocialCart%.2Findex.php%.3F%.2Fmain%.2Fverification&state=004dc1ebe9e081b2222408434af7dbd5&scope=email

重定向 uri 是

http%.3A%.2F%.2Flocalhost%.2FSocialCart%.2Findex.php%.3F%.2Fmain%.2Fverification

redirect_uri 解码后的 url 为:

http://localhost/SocialCart/index.php?/main/verification

redirect_uri 中有一个

%3F

© www.soinside.com 2019 - 2024. All rights reserved.