0

我们正在尝试使用 PHP SDK 将用户登录到我们的 Codeigniter 应用程序,我们使用分段 URI 并且不需要查询字符串,因此我们选择不使用它们。CI 和 Facebook 似乎存在的问题之一是将redirect_uri参数传递给getLoginUrl()ex

public function login(){
    if(!$this->user){
        $this->data['loginUrl'] = $this->facebook->getLoginUrl(array(
            'redirect_uri' => 'http://appdomain.com/users/login'
        ));
        $this->load->view('users/login', $this->data);
    }else{
        redirect('home/index');
    }
}

登录 Facebook 后,返回的 URI 有一个codeCI 不喜欢的查询变量,它实质上会破坏路由并显示一个空白页面。

http://appdomain.com/users/login/?code=dsfeoilkjd983274893hflksdfhhewhkdsiue8...

即使我添加$route['users/login/(:any)'] = 'users/login';routes.php,我仍然被重定向到一个空白页面。 Since we are using getAccessToken()要代表用户进行 API 调用,我们不需要使用code查询变量来交换访问令牌。MY_Controller是否可以在将查询字符串路由到之前完全删除查询字符串,可能是在method/action

我能够绕过问题的唯一方法是将默认控制器传递给redirect_uri参数,其他所有内容都不会路由到正确的 URI 并且只会显示一个空白页面。

我们欢迎所有的建议!

4

1 回答 1

1

您可以使用 删除查询字符串.htaccess。不确定它是否会起作用,但如果函数执行实际重定向(即登录过程正在将用户发送到http://appdomain.com/users/login/?code=dsfeoilkjd983274893hflksdfhhewhkdsiue8...似乎是这种情况),它应该会起作用。

.htaccess将(除了删除index.php)剥离查询字符串并将 url 发送http://appdomain.com/users/login/?code=dsfeoilkjd983274893http://appdomain.com/users/login/

RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1
RewriteCond %{QUERY_STRING} !=""
RewriteRule ^(.*)$ $1? [R,L]

最后R一行的 似乎是可选的。如果您将其省略,则 URL 仍会在 URL 中显示查询字符串,但不会被解析。如果您保留它,它将不会在 URL 中显示查询字符串。

于 2013-08-19T17:18:56.867 回答