2017-09-13 16 views
0

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`)='' 

答えて

0

Pls Userクラスのクラスまたはエクステンションクラスの__debugInfo()メソッドをチェックし、質問の説明に追加し、User::getNTNET()を追加します。 HTTPヘッダーからユーザ名とパスワードを取得するには

0

、 使用 $username = \Yii::$app->request->authUser;$password = \Yii::$app->request->authPassword;

lower()機能のスペルを確認してください。トレースメッセージでは、LOWaERです。それはLOWER

である必要があります。