与标题相同,我希望每个人在访问我的网站时,首先,必须登录(看起来像facebook或twitter ...)(我使用yii框架) 我尝试使用:
'components'=>array(
'user'=>array(
'loginUrl'=>array('site/login'),
),
);
或:
public function init()
{
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
{
if(Yii::app()->user->isGuest)
{
$this->layout='//layouts/login';
$this->render('error',$error);
}
}
}
else
{
if(Yii::app()->user->isGuest)
{
$this->layout='//layouts/login';
$this->render('login');
}
}
}
但没有工作,有人可以帮助我???
答案 0 :(得分:0)
我在这里看到了两种可能的方式:
预加载组件:
我假设你在这里分享的init()
- 函数是你自己的应用程序组件的一部分(也许是派生的CWebUser
,这是最有意义的)。如果是这样,只需添加"用户"到" preload"设置配置(所以在组件启动之前:
return array(
...
'preload' => array('user'),
'components' => array(
...
);
(通常它应该已经存在,因为" log"组件也已预先加载)。
1评论:如果这是另一个CApplicationComponent
的推导,请不要忘记调用父初始化函数。
Controller beforeAction
:
添加您自己的控制器并将其用作所有内容的基础:
class MyController extends CController
{
protected boolean beforeAction(CAction $action)
{
// Check if user is logged in and do logic if not
return parent::beforeAction($action);
}
}
鉴于您的init()
- 函数,第一个可能是最容易实现的。
答案 1 :(得分:0)
使用Yii访问控制。在这里阅读所有相关内容: http://www.yiiframework.com/doc/guide/1.1/en/topics.auth
您将通过向控制器添加特殊功能来实现此目的:
class MyController extends CController
{
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'list' and 'show' actions
'actions'=>array('login','register'),
'users'=>array('*'),
),
array('allow', // allow authenticated user to perform 'create' and 'update' actions
'users'=>array('@'),
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
...
}
该函数的名称必须是accessRules。
它的工作原理如下: -
在此处查看有关如何实现此问题的良好示例和说明:http://www.larryullman.com/2010/01/14/yii-framework-access-control-lists/