織夢dedecms使用Mysql8.0無法登錄后臺的解決辦法

2019-05-04 織夢安裝使用
  • 文章介紹
今天一個客戶聯系我們的技術,反饋說安裝之后,但是登錄后臺,一直提示用戶名不存在。通常這個原因有兩個(1、數據庫鏈接信息不對  2、數據庫表中的用戶名不是默認的admin,被修改過)經過多發查證,這兩個原因都被排除了,最后發現原來這位客戶用的是mysql8.0的數據庫。

因mysql 8.0新制定的語句表名限制條件被dede自帶的后臺用戶登錄檢查語句指定表別名所違背而引起的bug。如何解決呢?
 
找到dedecms的文件目錄, 在include子目錄下找到userlogin.class.php, 249行左右看到如下語句:
 
        //只允許用戶名和密碼用0-9,a-z,A-Z,'@','_','.','-'這些字符
        $this->userName = preg_replace("/[^[email protected]!\.-]/", '', $username);
        $this->userPwd = preg_replace("/[^[email protected]!\.-]/", '', $userpwd);
        $pwd = substr(md5($this->userPwd), 5, 20);

        $dsql->SetQuery("SELECT admin.*,atype.purviews FROM `dede_admin` admin LEFT JOIN `dede_admintype` atype ON atype.rank=admin.usertype WHERE admin.userid LIKE '".$this->userName."' LIMIT 0,1");
        $dsql->Execute();
        $row = $dsql->GetObject();
 
其中SetQuery就是設定將要執行的sql語句, 下一行Execute()來執行這個設定好語句,我們從語句里面改。改成如下:
 
        //只允許用戶名和密碼用0-9,a-z,A-Z,'@','_','.','-'這些字符
        $this->userName = preg_replace("/[^[email protected]!\.-]/", '', $username);
        $this->userPwd = preg_replace("/[^[email protected]!\.-]/", '', $userpwd);
        $pwd = substr(md5($this->userPwd), 5, 20);

        $dsql->SetQuery("SELECT admi.*,atype.purviews FROM `dede_admin` admi LEFT JOIN `dede_admintype` atype ON atype.rank=admi.usertype WHERE admi.userid LIKE '".$this->userName."' LIMIT 0,1");
        $dsql->Execute();
        $row = $dsql->GetObject();
 
這樣一來,表的別名從admin刪去一個n被改成admi, 就可以正常登錄后臺了。

上一篇:織夢上傳本地視頻后 文件管理器中不顯示解決辦法

下一篇:織夢cms手機站首頁不更新的解決辦法

專業的織夢模板定制下載站,在線購買后即可下載!

商業源碼

跟版網模板,累計幫助5000+客戶企業成功建站,為草根創業提供助力!

立刻開啟你的建站之旅
QQ在線客服

服務熱線

織夢建站咨詢
北京快乐8公式全天计划