我们正在尝试使用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,只显示空白页。
任何建议都会非常感谢!
答案 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中显示查询字符串。