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;
}
