2017-09-13 67 views
0

我在執行基於http頭中收到的NT用戶的自動登錄時遇到問題。 (內部網站)基於http頭的Yii2自動登錄

我已經添加下面的代碼在我的警予\基地控制器的beforeAction \ Controller.php這樣

public function beforeAction($action) 
{ 

    if (!Yii::$app->user->identity) { 
     Yii::$app->user->enableSession = false; 
     //the NT username received in the HTTP headers 
     $ntnet = \app\models\Users::getNTNET(); 
     //var_dump($ntnet); 
     $model = \app\models\Users::findOne(["LOWER(`user_name`)" => strtolower($ntnet)]); 
     if (!is_null($model)) 
     Yii::$app->user->login($model); 

    }  

    $event = new ActionEvent($action); 
    $this->trigger(self::EVENT_BEFORE_ACTION, $event); 
    return $event->isValid; 

如果我取消後續代碼var_dump($ ntnet)線,它會工作, echo $ name,如果沒有,$ ntnet將爲空,同樣的$模型,如果我var轉儲它(以及$ ntnet之前),它會輸出整個用戶屬性和登錄成功,否則,它會爲空,爲什麼?對我來說完全是無稽之談。例如 - 我有意在「LOWER()」函數中添加一個輸入錯誤以接收SQL錯誤並查看正在執行的整個查詢,並且如果var_dump($ ntnet)是註釋,它將生成下面, 正如你可以看到$ ntnet參數爲空:

SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION oncall.LOWaER does not exist 
The SQL being executed was: SELECT * FROM `users` WHERE LOWaER(`user_name`)='' 

用的var_dump($ ntnet)的錯誤將是如下:

SQLSTATE[42000]: Syntax error or access violation: 1305 FUNCTION oncall.LOWaER does not exist 
The SQL being executed was: SELECT * FROM `users` WHERE LOWaER(`user_name`)='myusername' 

在此先感謝。

回答

0

請檢查執行__debugInfo()方法User類或extendet類,並將問題描述和User::getNTNET()添加到。

0

從HTTP頭獲取用戶名和密碼,使用 $username = \Yii::$app->request->authUser;$password = \Yii::$app->request->authPassword;

同時檢查lower()功能的拼寫。在你的跟蹤信息上,它是LOWaER。它應該是LOWER