Форма входа, появляющаяся на каждой странице - PullRequest
0 голосов
/ 10 мая 2019

У нас есть модальная страница для входа в систему infusionsoft на каждой странице.Когда пользователь входит в систему, модальное окно скрыто, и информация на странице отображается, и она остается показанной при обновлении.Однако, когда пользователь переходит на другую страницу, форма входа снова появляется, даже если файлы cookie от имени пользователя все еще там.Вот код user-auth.php:

<?php

add_action( 'init', 'user_auth' );

/**
*
*
*/
function user_auth()
{
    if( !isset( $_POST['user-auth'] ) ) {
        return;
    }


    $page_id = 6;

    $code = get_field( 'access_code', $page_id );

    $v_username = isset( $_POST['entryemail'] ) ? $_POST['entryemail'] : '';
    $v_value = isset( $_POST['entrycode'] ) ? $_POST['entrycode'] : '';
    $v_time = isset( $_POST['remember'] ) ? $_POST['remember'] : 0;

    $infusion = new Infusion();
    $user = $infusion->findByEmail( $v_username );

    if( $user && ( $v_value == $code ) ) {

        $time = $v_time ? strtotime('+1 year') : strtotime('+3 day');

        $md5 = user_auth_user_save( $user );

        $url = parse_url( site_url() );
        $path = isset( $url['path'] ) ? $url['path'] : '';
        setcookie( 'website_login', $md5, $time, $path, $url['host'] );

        $GLOBALS['localpopup'] = true;
    }
    elseif( $user ) {
        $GLOBALS['localpopup'] = 'Invalid access code.';
    }
    else {
        $GLOBALS['localpopup'] = 'Your email cannot be found.';
    }
}

форма (login.php):

<?php

$email = isset( $_POST['entryemail'] ) ? $_POST['entryemail'] : '';
$code = isset( $_POST['entrycode'] ) ? $_POST['entrycode'] : '';
$remember = isset( $_POST['remember'] ) ? $_POST['remember'] : false;

$error = '';
if( isset( $GLOBALS['localpopup'] ) ) {
    $error = $GLOBALS['localpopup'];
}

?>
<div class="form-code-wraper" id="code-login">

    <span class="logo-popup"><img src="<?php echo THEMEURL ?>images/logo.png" alt="Pointy"/></span>

    <h1>Welcome</h1>
    <h2>Please enter your access code</h2>

    <form accept-charset="UTF-8" action="" class="entry-form" method="POST">
        <div class="input-holder-popup enter-code clearfix">
            <div class="input-row clearfix">
                <label for="entryemail">Email: </label>
                <input class="field-input-container" id="entryemail" name="entryemail" type="email" dir="ltr" required value="<?php echo $email ?>"/>
            </div>
            <div class="input-row clearfix">
                <label for="entrycode">Code: </label>
                <input class="field-input-container" id="entrycode" name="entrycode" type="text" required  value="<?php echo $code ?>"/>
            </div>
            <div class="input-row clear remember-input">
                <input type="checkbox" id="remember" name="remember" value="1" <?php if( $remember ) : ?> checked="checked"<?php endif ?>/> <label for="remember">Remember me</label>
            </div>
        </div>

        <div class="buttons send-button">
            <input type="submit" name="user-auth" value="Enter" id="user-auth" />
        </div>
    </form>

    <div class="send-info">
        <?php if( $error ) : ?><div class="error-message"><?php echo $error ?></div><?php endif ?>
        <a href="#" class="register-link">No code? Click here</a>
    </div>

</div>

popup.php:

<?php
if(is_page('282')){
    return;
}else {
    if( user_auth_popup_hide() ) {
        return;
    }
}
?>
<div id="light" class="white_content">
    <?php get_template_part( 'blocks/popup/login' ) ?>
    <?php get_template_part( 'blocks/popup/register' ) ?>
</div>
<div id="fade" class="black_overlay"></div>



function user_auth_popup_hide()
{
    $localpopup = isset( $GLOBALS['localpopup'] ) && ( $GLOBALS['localpopup'] === true );
    $cookie = isset( $_COOKIE['website_login'] );
    $special_page = in_array( get_the_ID(), array(
        169,
        172,
    ) );

    return $localpopup || $cookie || $special_page;
}

1 Ответ

0 голосов
/ 16 мая 2019

РЕШИТЬ: Это была не проблема кода, а проблема с установленным кэшированием, которое блокировало файлы cookie авторизации.

небольшая ошибка в коде .... вместо использования

$ url = parse_url (site_url ()); $ path = isset ($ url ['path'])? $ url ['path']: '';

Файл cookie должен быть установлен с setcookie ('website_login', $ md5, $ time, '/', 'websitedomainname.com');

Я пробовал '/' до того как путь, и он не работал, поэтому доменное имя веб-сайта в этом случае было необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...