2017-09-13 62 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