Tank Auth: автоматический вход при подтверждении электронной почты

Я использую Tank Auth и требую, чтобы мои пользователи подтверждали свои адреса электронной почты. После проверки пользователи все еще не вошли в систему. Я хотел бы, чтобы пользователи автоматически входили в систему при активации своей учетной записи.

В моей предыдущей версии (самодельная авторизация) я написал функцию входа в систему, которая не требовала пароля, и ее можно было вызвать только в этой ситуации. Однако я не вижу способа сделать это в Tank Auth. Одним из решений было бы кэшировать пароли до активации, но я действительно не хочу этого делать...


person Mala    schedule 27.01.2012    source источник
comment
как мне автоматически войти в систему при подтверждении электронной почты?   -  person Mala    schedule 27.01.2012
comment
См. это (решение, данное самим автором библиотеки): авторизация   -  person developer10    schedule 07.02.2012


Ответы (2)


Вы можете просто обойти систему входа в систему.

Сохраните адрес электронной почты ИЛИ псевдоним в файле cookie.

когда они активируются, захватите файл cookie, найдите (убедитесь, что они существуют) для пользователя, затем настройте обычный сеанс входа в систему.

Логин — это просто набор правил сеанса.

в вашем сценарии активации/процессе электронной почты добавьте

$this->_set_ac_cookie({email});

-

protected function _set_ac_cookie({email})
{
    return $this->input->set_cookie(array(
        'name'  =>  'ac_cookie_'.{email},
        'expire'    =>  '7200', //You may mirror when/if your activation key expires
        'domain'    =>  'yourdomain.com',
        'path'  =>  '/'
    ));
}

проверить наличие файла cookie

protected function _before_activation({email})
{
    return $this->input->cookie('ac_cookie_'.{email})) ? TRUE : FALSE;
    //make sure {email} has a UNIQUE db constraint
}

когда пользователь нажимает ссылку активации

if($this->_before_activation({email}))
{
        //check user exists AND activation status === false (0)
        //grab the user details from db based on {email}, set activation status to true (1)

        //setup login session
        $this->session->set_userdata(array(
            'logged_in' =>  (int)1,
            'user_id'   =>  {user->id},
            'alias' =>  {user->alias}
        ));

        redirect('dashboard');
}
else
{
    //sorry!
}
person Philip    schedule 27.01.2012
comment
круто, спасибо. Я использовал в основном что-то вроде этого, в основном написав функцию force_login(), очень похожую на ваш последний блок кода. - person Mala; 28.01.2012

Если вы посмотрите на код внутри tank auth, который обрабатывает активацию по электронной почте, вы увидите, что он явно отключает пользователя при проверке электронной почты.

https://github.com/ilkon/Tank-Auth/blob/master/application/controllers/auth.php

Строка 243.

Вы можете просто закомментировать $this->tank_auth->logout(); в строке 244, и это должно работать так, как вы хотите, но это будет плохой практикой.

person ghstcode    schedule 27.01.2012
comment
из того, что я вижу в коде, это применимо только в том случае, если пользователь вошел в систему неактивированным и, таким образом, получил неактивированный сеанс - person Mala; 28.01.2012