解决Phpwind8.7升级9.0后出现的无法登录问题,提示“帐号不存在”

时间: 2013-05-14 / 分类: phpwind / 浏览次数: 3,163 views / 0个评论 发表评论

今天想给破论坛升级,按照官方给的步骤升级到了9.0,然后就出现问题了,前台任何用户名都无法登录,不过还好后台可以,我按照论坛上的提示

清空缓存啥的,然后又按照提示设置通讯码啥的,结果还是问题依旧

 

好吧,那就趁着这个机会研究研究PW吧

新版本让人真够纠结的,虽然8.7的时候已经让人纠结了,现在更是让人纠结啊

 

随手记录了一些过程,都是按照我的理解写的,我是半路出家的,很多术语可能写错了,不过无所谓,主要还是写给自己看,自己懂就行了

以后有问题还可以在这个基础上继续研究,省些时间

 

127.0.0.25是我在本地测试的论坛网址

 

首页index.php调用\src\wekit.php,这个文件先调用了WIN框架,具体在\wind\Wind.php

现在先研究这个框架,发现他在\wind\Wind.php文件末尾执行了一个init(),这个init()主要调用了一个_loadBaseLib(),看含义是加载基本的函数,这个函数在文件末尾,貌似赋值一个函数名的列表给$_classes以备用

再回到index.php, Wekit::run(‘phpwind’);实例化Wekit并调用run函数

回到\src\wekit.php找到run函数,也是先初始化self::init($name);

看看他初始化了什么东西,找到本类里的init函数,先self::_loadSystemConfig读取系统设置,主要是在两个文件中,一个是WEKIT_PATH . ‘../conf/application/default.php’,另外一个是WEKIT_PATH . ‘../conf/application/’ . $name . ‘.php’,目前这个$namephpwind,也就是说这个文件是WEKIT_PATH . ‘../conf/application/phpwind.php’

先打开第一个文件WEKIT_PATH . ‘../conf/application/default.php’,里面写着“全局产品级应用配置”,里面定义了‘directory’ => ‘../conf/directory.php’等东西,这个貌似是“源代码库目录,路径相对于wekit.php文件所在目录”

第二个文件WEKIT_PATH . ‘../conf/application/phpwind.php’ 为“全局产品级应用配置”,定义了一个web-apps里面有个phpwind它的‘default-module’ => ‘bbs’等等等等

回到\src\wekit.php类里的init函数 的下一句$_conf = include WEKIT_PATH . self::S(‘directory’); 就是 获取系统配置 ,当然返回的是一个数组

例如:

Array
(
    [ROOT] => ..
    [CONF] => ../conf
    [DATA] => ../data
    [SRC] => ../src
    [APPS] => ../src/applications
    [EXT] => ../src/extensions
    [HOOK] => ../src/hooks
    [LIB] => ../src/library
    [SRV] => ../src/service
    [REP] => ../src/repository
    [WINDID] => ../src/windid
    [ACLOUD] => ../src/aCloud
    [ADMIN] => ../src/applications/admin
    [APPCENTER] => ../src/applications/appcenter
    [PUBLIC] => ..
    [THEMES] => ../themes
    [TPL] => ../template
    [ATTACH] => ../attachment
    [HTML] => ../html
)

接下来就调用框架的Wind::register函数注册命名空间

self::_loadBase();再预加载一些类,这些类名在\src\wekit.php文件最后面

self::$_var = self::S(‘global-vars’);获取全局变量  全局配置变量

Wind::import

        * 加载一个类或者加载一个包

        * 如果加载的包中有子文件夹不进行循环加载

        * 参数格式说明:‘WIND:base.WFrontController’

        * WIND 注册的应用名称,应用名称与路径信息用‘:’号分隔

        * base.WFrontController 相对的路径信息

        * 如果不填写应用名称 ,例如‘base.WFrontController’,那么加载路径则相对于默认的应用路径

        * 加载一个类的参数方式:‘WIND:base.WFrontController’

        * 加载一个包的参数方式:‘WIND:base.*’

举例:Wind::import(‘WIND:utility.WindFolder’);加载的是\wind\utility\WindFolder.php

Wind::import(‘LIB:base.*’);加载\src\library\base里的所有东西

用户名验证http://127.0.0.25/index.php?m=u&c=login&a=checkname

checkname函数的文件\src\applications\u\controller\LoginController.php

函数为checknameAction()这个函数应该在文件Wind::import(‘SRV:user.srv.PwLoginService’);

也就是\src\service\user\srv\PwLoginService.php

showError函数显示的是E:\vhosts\25_imxh.co.cc\src\i18n\zh_cn\user\message.lang里面的语句

if (!$info) $this->showError(‘USER:user.error.-14’);//这个显示的帐号不存在

估计在$info = $login->checkInput($this->getInput(‘username’));这句出的问题,经过测试$this->getInput(‘username’)可以获取用户名,那只能说问题出在$login->checkInput这里了

打开\src\service\user\srv\PwLoginService.php找到checkInput函数

其中涉及到$this->loginConfig = Wekit::C(‘login’);设置的几种登录方式

结果发现$this->loginConfig[‘ways’]登录方式竟然为空

到后台 http://127.0.0.25/admin.php? 输入管理帐号密码进入

然后 全局 注册登录 登录设置 设置自己的论坛登陆方式,我在用户名前打勾选了用户名这种方式 然后提交

 

发表评论

你必须 登录后 才能留言!