Yii2基于http标头自动登录

时间:2017-09-13 08:21:08

标签: php yii yii2

我在基于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'

提前致谢。

2 个答案:

答案 0 :(得分:0)

请检查__debugInfo()类或extendet类中的实现User方法,并添加到问题说明和User::getNTNET()

答案 1 :(得分:0)

要从HTTP标头获取用户名和密码, 使用 $username = \Yii::$app->request->authUser;$password = \Yii::$app->request->authPassword;

同时检查lower()功能的拼写。在您的跟踪消息上,它是LOWaER。它应该是LOWER