您当前的位置:首页 > 分类 > 技术资讯 > YII > 正文

Yii gii密码正确,却登录不进去

发布时间:2015-01-15 14:05:13      来源:51推一把
【摘要】配置好Yii Gii后访问输入密码后还是在原页面index.php?r=gii/default/login。也不报错这是为什么呢? 有时候Gii总是莫名地耍点小脾气,让人又气又急,下面就来看如何破解吧~
一、设置YII的GII。

自动生成代码从版本1.1.2开始,Yii 装备了一个基于 web 的代码生成工具,叫做 Gii。它替代之前的 yiic shell 生成工具(它运行在命令行)。在这一小节中,我们将描述如何使用 Gii 以及如何扩展 Gii 来增加我们的开发生产力。使用Gii

Gii 以一个模块的方式运行,必须在一个已存在的Yii应用内部使用。要使用 Gii,我们首先改变应用配置如下:

 

return array(
    ......
    modules=>array(
        gii=>array(
            class=>system.gii.GiiModule,
            password=>密码,
            // ipFilters=>array(...a list of IPs...),   array(*)不限
        ),
    ),
);
在上面,我们声明了一个模块名为 gii,它的类是GiiModule。我们也为这个模块指定了一个密码,当访问 Gii 时需要输入。

默认的,处于安全考虑,Gii 被配置为只允许在本地访问。若我们想要在另外信任的机器上访问,可以在如上代码中配置 GiiModule::ipFilters 属性。

因为Gii可以产生并保存新代码文件到已存在的应用中,我们需要确保 web 服务器进程有权限这样做。在上面的 GiiModule::newFileMode 和 GiiModule::newDirMode 属性控制这些新文件和目录应当如何被产生。

注意:Gii 主要是一个开发工具。因此,它应只被安装于一个开发机器上。因为它可以产生新PHP脚本文件到应用中,我们应当注意采取安全措施(例如 password,IP filters)。

现在我们可以通过 URL http://hostname/path/to/index.php?r=gii 访问 Gii ,这里我们假设 http://hostname/path/to/index.php 是访问已存在Yii应用的 URL。

若已存在的Yii应用使用 path 格式的 URL ,我们可以通过 URL http://hostnamepath/to/index.php/gii 访问 Gii。我们也需要增加如下 URL 规则到已存在URL规则的前面:

 

components=>array(
    ......
    urlManager=>array(
        urlFormat=>path,
        rules=>array(
            gii=>gii,
            gii/<controller:/w+>=>gii/<controller>,
            gii/<controller:/w+>/<action:/w+>=>gii/<controller>/<action>,
            ...existing rules...
        ),
    ),
)
Gii 有一个新的默认代码生成器。每个代码生成器负责生成一个特定类型的代码。例如, controller 生成器生成一个控制器类以及一些动作视图脚本;model 生成器为指定的数据表生成一个 ActiveRecord 类。

 

 

二、目录存在和权限。

很多时候,gii莫名登录不进去,一直停留在登录页,那就去检查下以下几方面的问题吧~

yii的工作目录有看有没有建好;
工作目录是否有写的权限;
不止一个目录要检查,要看看还有其他相关的目录是否有设置。

权限问题处理完,再试下应该可以了~

三、暴力突破

如果还是不行,就彻底绕过密码吧

找到gii目录下 GiiModule.php(gii根目录)

public function beforeControllerAction($controller, $action)
{
if(parent::beforeControllerAction($controller, $action))
{
$route=$controller->id./.$action->id;
if(!$this->allowIp(Yii::app()->request->userHostAddress) && $route!==default/error)
throw new CHttpException(403,"You are not allowed to access this page.");

$publicPages=array(
default/login,
default/error,
);

return true; //这里直接返回true  OK,大功告成

if($this->password!==false && Yii::app()->user->isGuest && !in_array($route,$publicPages))
Yii::app()->user->loginRequired();
else
return true;
}
return false;
}