Yii2 - AutoLogin not working / Autologin funktioniert nicht

Hallo,

ich habe mir die Yii2 Basic Version installiert. Diese habe ich etwas erweitert, um das Login über die MySQL Datenbank machen zu können. Das Login funktioniert auch mit den Daten aus der Datenbank. Ebenfalls setze ich die "rememberMe" auf true, um zum späteren Zeitpunkt automatisch eingeloggt zu werden. Der Cookie _identity wird auch angelegt, doch obwohl der Cookie da ist, funktioniert nicht der AutoLogin.

Das ist die IdentityClass:


namespace app\models\Objects;

class User extends \app\models\ActiveRecord\User implements \yii\web\IdentityInterface 

{

    public static function findIdentity($id) {

        $dbUser = static::find()->where(["id" => $id])->one();

        if (!count($dbUser)) {

            return null;

        }

        return new static($dbUser);

    }


    public static function findByEmail($email){

        return static::findOne(['email' => $email]);

    }


    public static function findIdentityByAccessToken($token, $userType = null) {

        var_dump('Auto LOGIN');

        die();

        return NULL;

    }


    public function getId() {

        return $this->id;

    }


    public function getAuthKey() {

        return NULL;

    }


    public function validateAuthKey($authKey) {

        var_dump('AUTO LOGIN 2');

        return NULL;

    }


    public function validatePassword($password) {

        return $this->password === md5($password);

    }

}

Bei findIdentityByAccessToken gebe ich NULL zurück, weil dies nicht gebraucht wird. Meinerseits. In der Datenbank habe ich nur eine Email Adresse und Passwort gespeichert. In einigen Methoden, die meinerseits nicht gebraucht werden, habe ich einen var_dump eingebaut. Damit will ich schauen, ob die Methode von Yii aufgerufen wird. Doch nirgends wird etwas ausgegeben; scheint also nicht der Fall zu sein.

Meine Config enthält unter components:


'user' => [

            'identityClass' => 'app\models\Objects\User',

            'enableAutoLogin' => true,

            'loginUrl' => [ 'user/login' ],

],

Mein Login Form Model:


namespace app\models\Form;

use Yii;

use yii\base\Model;

use app\models\Objects\User;

class Login extends Model 

{

    public $email;

    public $password;

    public $rememberMe = false;

    private $_user = false;


    public function rules() {

        return [

            [['password', 'email',], 'required'],

            ['email', 'email'],

            ['rememberMe', 'boolean'],

//            ['verifyCode', 'captcha'],

            ['password', 'validatePassword'],

        ];

    }


    public function attributeLabels() {

        return [

            'verifyCode' => 'Verification Code',

        ];

    }


    public function validatePassword($attribute, $params) {

        if (!$this->hasErrors()) {

            $user = $this->getUser();

            if (!$user || !$user->validatePassword($this->password)) {

                $this->addError($attribute, 'Incorrect username or password.');

            }

        }

    }


    public function login() {

        if ($this->validate()) {

            return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);

        } else {

            return false;

        }

    }


    public function getUser() {

        if ($this->_user === false) {

            $this->_user = User::findByEmail($this->email);

        }

        return $this->_user;

    }

}

Und die Action, falls von Bedeutung:


namespace app\controllers\User;

use Yii;

use app\models\Form\Login;

use yii\base\Action;


class LoginAction extends Action{


    public function run(){

        if (!\Yii::$app->user->isGuest) {

            return $this->controller->goHome();

        }

        $model = new Login();

        if ($model->load(Yii::$app->request->post()) && $model->login()) {

            return $this->controller->goBack();

        } else {

            return $this->controller->render('login', [

                'model' => $model,

            ]);

        }

    }


}

Ist irgendwo hier das Problem?

Gruß

Ich hab’s glaub ich nach langer debugging session gefunden:

in der User class in function generateAuthKey:




$this->auth_key = Yii::$app->security->generateRandomString();

$this->save();



in function getAuthKey()




$this->generateAuthKey();

return $this->auth_key();



So funktioniert’s bei mir, ich weiss nicht ob das der richtige Weg ist, da keinerlei Dokumentation vorhanden ist. Zumindest wird mit der Aenderung der auth_key in die DB geschrieben und meine Tests loggen mich automatisch ein.