Как предотвратить множественные входы в Zendframework

У меня есть веб-сайт, и я хочу проверить, не вошел ли пользователь с другого устройства. Я сохраняю значение сеанса в пользовательской таблице, и мне нужны некоторые условия, чтобы этого не происходило.

У меня есть этот код для входа в систему:

public static function login($request)
{

    if (empty($request)) {
         return false;
    }

    Zend_Session::regenerateId();

    $authAdapter = new Zend_Auth_Adapter_DbTable();
    $authAdapter->setTableName('ah_users');
    $authAdapter->setCredential($request['password']);
    $authAdapter->setCredentialTreatment('MD5(?)');
    $authAdapter->setCredentialColumn('password');
    $authAdapter->setIdentity($request['username']);
    $authAdapter->setIdentityColumn('nname');

    $auth = Zend_Auth::getInstance();

    $result = $auth->authenticate($authAdapter);

    if ($result->isValid()) {
        $authData = $authAdapter->getResultRowObject();
        $user = new Model_AhUsers((array) $authData);

        if(!$user->isActive()) return 3; //if user is activated
        if($authData->role == 'admin' && $authData->payment != 'completed') return 4;
        //here i want to query if user is logged in from another browser / pc device to return 1

        $user->seskey = Zend_Session::getId();
        $user->update();
        self::setLoggedUser($user);
        return 0;
    }

    return 2;
}

И еще у меня есть эти функции, но независимо от того, как я их объединяю, все работает не так, как должно.

public static function isLogged()
{
    $auth = Zend_Auth::getInstance();
    return $auth->hasIdentity();
}

public static function setLoggedUser(Model_AhUsers $user)
{
    $auth = Zend_Auth::getInstance();
    $storage = $auth->getStorage();
    $storage->write($user);
}

/**
 * @return Model_AhUsers|null
 */
public static function getLoggedUser()
{
    $auth = Zend_Auth::getInstance();
    return $auth->getIdentity();
}

public function logout()
{
    $auth = Zend_Auth::getInstance();
    $auth->clearIdentity();
}

0 ответов

Другие вопросы по тегам