在Yii Framework中查看网站之前登录

时间:2014-03-30 15:37:19

标签: php yii

与标题相同,我希望每个人在访问我的网站时,首先,必须登录(看起来像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');
            }
        }
    }

但没有工作,有人可以帮助我???

2 个答案:

答案 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/