我目前正在使用Yii框架开发一个Facebook画布应用程序,它有多个标签
为应用设置 CWebUser 组件时出现问题
我在user
的{{1}}方法中设置SiteController
组件
设置完之后,我想重定向到我的应用程序中的特定页面选项卡
在重定向的页面中,我想使用用户信息,但用户组件信息丢失
SiteController的代码如下:
actionIndex()
新页面的代码:
<?php
class SiteController extends Controller{
// other functions
public function actionIndex(){
// call the Facebook PHP SDK to getUser();
$fbHelper = new FacebookHelper();
$userInfo = $fbHelper->getCurrentInfo();
Yii::app()->user->setId($value['id']);
Yii::app()->user->setName($value['name']);
// further i set some more values that are required by the app using setState()
// query the db to find out what the user was doing last time
// and then redirect accordingly to the next page
$this->redirect(array('pagelist/index'));
}
}
PagelistController的index.php视图中的代码:
<?php
class PagelistController extends Controller{
public function actionIndex() {
$this->render('index');
}
}
很明显,用户信息在重定向中丢失了
现在我收集的是,Facebook的PHP SDK使用会话来存储它的实例,CWebUser组件也是如此。所以我的猜测是FB PHP SDK正在清除重定向会话,这也最终清除了Yii app会话。或接近发生的事情!!
那么我们如何在应用程序的生命周期内保留用户信息呢?
我应该修改FB PHP SDK,以便它使用已生成的yii应用程序会话吗?或者可能阻止它在重定向时清除会话?
感谢任何帮助。
修改:
我使用包含在main.php配置文件中的以下代码的会话作为应用程序组件。但是,如果删除此代码,一切正常,任何想法,为什么这会阻止会话保留?
<?php
echo "Hi ".Yii::app()->user->name;
// Yii::app()->user->getIsGuest(); returns true, which shouldn't be the case.
答案 0 :(得分:1)
我正在使用以下为facebook connect ...
创建的扩展程序https://github.com/ielshareef/FacebookExtension4Yii
我发现它很有用,直到现在没有问题..即使我已经更新了最新版本的PHP-SDK并根据我的性质做了一些改变..
此扩展使用userIdentity接口将登录facebook的当前设置为默认的CWebUser ...
答案 1 :(得分:1)
尝试使用CWebUser::setState()更新会话而不是Yii :: app() - &gt; user-&gt; setName,例如:
$cwu = new CWebUser();
$cwu->setState('name','newname');
答案 2 :(得分:1)
为避免facebook API会话与Yii会话之间发生冲突,您应编辑文件 facebook.php ,并在构造函数中替换
if ((function_exists('session_status') && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
session_start();
}
通过
if ((function_exists('session_status') && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
Yii::app()->session->open();
}