httpヘッダーで受信したNTユーザーに基づいて自動ログインを実装する際に問題が発生しました。 (イントラネットのWebサイト)私は私のYii \ベースのbeforeActionに次のコードを追加しましたhttpヘッダーに基づくYii2自動ログイン
\ 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)行のコメントを解除した場合、それは動作しますし、名前をエコーし、そうでない場合は、$ ntnetはnullになります。varモデルをダンプすると$ ntnetと同様に$ modelに渡され、ユーザプロパティ全体を出力し、正常にログインします。それはなぜですか?それは私には意味がありません。
たとえば、私は意図的にSQLエラーを受け取り、実行されているクエリ全体を表示するために "LOWER()"関数にtypoを追加しました。もし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`)='myusername'
ありがとう:エラーは、次のようになりますの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`)=''
。