2015-05-31 3 views
-1

Я пытаюсь реализовать функцию автолога в yii2.Yii2 автолог не работает

Так что я позволил автовход в конфигурации:

'user' => [ 
    'identityClass' => 'app\models\User', 
    'enableAutoLogin' => true, 
    'loginUrl' => ['account/login', 'account', 'account/index'], 
], 

Также я добавил RememberMe поле в конфигурации формы

public function scenarios() { 
    return [ 
     'login' => ['username','password','rememberMe'], 
     'activate' => ['password','passwordrepeat'], 
     'register' => ['username', 'mail'], 
     'setup' => ['username', 'password', 'passwordrepeat', 'mail', 'secretkey'], 
    ]; 
} 
// ... 
[ 
    ['rememberMe'], 
    'boolean', 
    'on' => 'login', 
], 

Я использую это сейчас при входе в систему:

public function login() { 
    //var_dump((bool) ($this->rememberMe)); exit(); 
    if (!$this->validate()) { 
     return false; 
    } 

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

Если я вхожу в систему, функция функции getAuthKey пользователя вызывается и создается новая auth_key.

public function generateAuthKey() { 
    $this->auth_key = Yii::$app->getSecurity()->generateRandomString(); 
    Helper::save($this); 
    // Helper is a database helper which will update some rows like last_modified_at and similar in database 
} 

/** 
* @inheritdoc 
*/ 
public function getAuthKey() 
{ 
    $this->generateAuthKey(); 
    return $this->auth_key; 
} 

Но всегда, я вхожу в систему, он не устанавливает некоторые переменные печенья. Мои печенье всегда

console.write_line(document.cookie) 
# => "_lcp=a; _lcp2=a; _lcp3=a" 

И если я перезагрузить мой браузер, я не вошли в систему. Что я делаю неправильно?

Кажется, что Yii не работает с печеньем правильно:

var_dump(Yii::$app->getRequest()->getCookies()); exit(); 

Результаты в:

object(yii\web\CookieCollection)#67 (2) { ["readOnly"]=> bool(true) ["_cookies":"yii\web\CookieCollection":private]=> array(0) { } } 

Если я получить доступ через $_COOKIE у меня есть один и то же значение, что и в JS.

Заранее спасибо

+0

Вы решили проблему? – verybadbug

+0

нет, но я не работал над ним, так как mothods здесь не помогает, и я havent успел поработать над этой проблемой – Kai

ответ

0

Я думаю, вы не должны создать ключ AUTH каждый раз, когда в вашем методе getAuthKey. Ваше приложение пытается сравнить значение базы данных с ключом auth, хранящимся в вашем файле cookie. Просто сгенерируйте его один раз перед вставкой пользователя:

/** 
* @inheritdoc 
*/ 
public function getAuthKey() 
{ 
    return $this->auth_key; 
} 

/** 
* @inheritdoc 
*/ 
public function beforeSave($insert) 
{ 
    if (!parent::beforeSave($insert)) { 
     return false; 
    } 
    if ($insert) { 
     $this->generateAuthKey(); 
    } 
    return true; 
} 
+0

Что делать, если ключ auth всегда генерируется правильно? Я также вижу его в БД и в cookie. Cookie также имеет правильную дату истечения срока действия. Тем не менее, я никогда не подписываюсь автоматически. Я установил '' enableAutoLogin '=> true', а все остальные методы по умолчанию. Так что это должно сработать. Я где-то читал, что вызов 'Yii :: $ app-> user-> identity' должен запускать вход в файл cookie, но это не так. Любой совет? – jeesus

0

Может быть ваш тайм-аут для автоматического входа не установлен Проверьте, если у вас есть правильное присвоение значения, присвоенного переменной:

$ authTimeout; $ absoluteAuthTimeout;

See for more

+0

mhm ... Я попробовал это, как вы сказали, и это не работает:/''user' => [ 'identityClass' => 'app \ models \ User', 'enableAutoLogin' => true, 'authTimeout' => 3600 * 30 * 24, 'absoluteAuthTimeoutParam' => '_identity',], '- Я также пробовал' authTimeoutParam' но, похоже, не работает слишком – Kai

Смежные вопросы