Codeigniter,Facebook和Facebook的登录“代码”查询变量

时间:2013-08-19 16:16:00

标签: facebook codeigniter query-string url-routing facebook-php-sdk

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

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有一个CI不喜欢的code查询变量,它实际上会中断路由并显示空白页。

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

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

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

任何建议都会非常感谢!

1 个答案:

答案 0 :(得分:1)

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

.htaccess将(除了删除index.php)删除查询字符串并将网址http://appdomain.com/users/login/?code=dsfeoilkjd983274893发送到http://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中显示查询字符串。