解决Phpwind8.7升级9.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’,目前这个$name是phpwind,也就是说这个文件是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? 输入管理帐号密码进入
然后 全局 注册登录 登录设置 设置自己的论坛登陆方式,我在用户名前打勾选了用户名这种方式 然后提交