Yii框架整合Ucenter更新与增强

在我前面的博文中提出了整合ucenter到yii应用的方法,还有一些不完美,那就是,登录、退出需要手动输出js到页面上来通知其他应用。那么如何做到自动处理,而不需要特别照顾?我发现只需要继承CWebUser类,实现自己的WebUser类,并覆盖登录和退出两个事件即可,不多说,上代码:

 

<?php
class WebUser extends CWebUser
{
    public function afterLogin($fromCookie) 
    {
		parent::afterLogin ( $fromCookie );
		
		//ucenter
		Yii::import ( 'application.vendors.*' );
		include_once 'ucenter.php';
		
		$script = uc_user_synlogin ( $this->getId () );
		$count = preg_match_all ( '/src="(.+?)"/i', $script, $matches );
		
		if ($count > 0) {
			foreach ( $matches [1] as $file ) {
				Yii::app ()->clientScript->registerScriptFile ( $file, CClientScript::POS_END );
			}
		}
		//局部刷新顶部登录状态
		Yii::app()->clientScript->registerScript('refresh-login-status', 'top.$("#top_nav").load("'.CHtml::normalizeUrl(array('/site/login_status')).'");');
	}
	
	public function afterLogout()
	{
		parent::afterLogout();
		//ucenter
		Yii::import ( 'application.vendors.*' );
		include_once 'ucenter.php';
		
		$script = uc_user_synlogout();
		$count = preg_match_all ( '/src="(.+?)"/i', $script, $matches );
		
		if ($count > 0) {
			foreach ( $matches [1] as $file ) {
				Yii::app ()->clientScript->registerScriptFile ( $file, CClientScript::POS_END );
			}
		}
		Yii::app()->clientScript->registerScript('refresh-login-status', 'top.$("#top_nav").load("'.CHtml::normalizeUrl(array('/site/login_status')).'");');
	}
}

 

可以看到,我用正则匹配出了各应用通知的js,然后用CClientScript注册到页面底部。另外,由于在我的应用中头部有个局部加载的登录状态,用jquery自动更新了。

 

将这个类放在components目录下,接下来修改config/main.php的user段设置即可:

 

'user'=>array(
			'class'=>'WebUser',
			// enable cookie-based authentication
			'allowAutoLogin'=>true,
			'loginUrl' => array('/site/login'),
		),

 

这样有个最大的好处,就是应用记住用户登录后,下次用户访问网站任何页面,都会自动登录,并同时登录到其他应用。但要注意:在用户登录成功、退出成功等action中,不要直接redirect,还是需要输出一个跳转页面,否则这些js不会输出到浏览器。

 

本人博客迁移到 http://yiidev.cn 本博客停止更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值