我在基于http标头中收到的NT用户实现自动登录时遇到问题。 (内联网网站)
我在yii \ base \ Controller.php的beforeAction中添加了以下代码
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)行,它将起作用,并且回显名称,如果没有,$ ntnet将为null,对于$ model也是如此,如果我var转储它(以及$ ntnet)在那之前),它将输出整个用户属性并成功登录,否则,它将为null,为什么呢?这对我没用。
例如 - 我故意在“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 :(得分:0)
请检查__debugInfo()
类或extendet类中的实现User
方法,并添加到问题说明和User::getNTNET()
。
答案 1 :(得分:0)
要从HTTP标头获取用户名和密码,
使用
$username = \Yii::$app->request->authUser;
和$password = \Yii::$app->request->authPassword;
同时检查lower()
功能的拼写。在您的跟踪消息上,它是LOWaER
。它应该是LOWER