前端Ajax用户登录会话问题

时间:2018-10-13 10:18:58

标签: php ajax wordpress session frontend

我遇到了ajax登录表单允许我登录的问题。如果我在登录后将重定向设置为首页,则会将我重定向到首页,并在顶部显示管理栏。但是,如果我尝试转到管理控制台,则要求我使用普通的wordpress登录名再次登录。

如何解决此问题?我的代码:

在page-login.php模板中:

<form id="login" class="ajax-auth" action="login" method="post">
    <p class="status"></p>  
    <?php wp_nonce_field('ajax-login-nonce', 'security'); ?>  
    <div class="form-group">
        <input id="username" placeholder="<?php _e('Username','my-theme'); ?>" type="text" class="required form-control" name="username">
    </div>
    <div class="form-group">
        <input id="password" placeholder="<?php _e('Password','my-theme'); ?>" type="password" class="required form-control" name="password">
    </div>
    <input class="btn btn-block btn-md btn-info" type="submit" value="<?php _e('Login','my-theme'); ?>">
</form>

在functions.php中:

function ajax_auth_init(){  
  global $theme_options;
  $userProfilePage=$theme_options['opt-user-select'];

  wp_register_script('ajax-auth-script', get_template_directory_uri() . '/assets/js/ajax-logreg-script.js', array('jquery') ); 
  wp_enqueue_script('ajax-auth-script');

  wp_localize_script( 'ajax-auth-script', 'ajax_auth_object', array( 
    'ajaxurl' => admin_url( 'admin-ajax.php' ),
    'redirecturl' => get_page_link($userProfilePage),
    'loadingmessage' => __('Please wait...','my-theme')
  ));

  // Enable the user with no privileges to run ajax_login() in AJAX
  add_action( 'wp_ajax_nopriv_ajaxlogin', 'ajax_login' );
}
// Execute the action only if the user isn't logged in
if (!is_user_logged_in()) {
    add_action('init', 'ajax_auth_init');
}
function ajax_login(){

  // First check the nonce, if it fails the function will break
  check_ajax_referer( 'ajax-login-nonce', 'security' );

    // Nonce is checked, get the POST data and sign user on
    // Call auth_user_login
  auth_user_login($_POST['username'], $_POST['password'], __('Login','my-theme')); 

  die();
}
function auth_user_login($user_login, $password, $login){
  $info = array();
  $info['user_login'] = $user_login;
  $info['user_password'] = $password;
  $info['remember'] = true;

  $user_signon = wp_signon( $info, false );
    if ( is_wp_error($user_signon) ){
    echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong password or username.','my-theme')));
    } else {
    wp_set_current_user($user_signon->ID); 
        echo json_encode(array('loggedin'=>true, 'message'=> $login.__(' successful, redirecting...','my-theme')));
    }

  die();
}

和ajax-logreg-script.js文件:

jQuery(document).ready(function ($) {

    // Perform AJAX login/register on form submit
    $('form#login, form#register').on('submit', function (e) {
        if (!$(this).valid()) return false;
        $('p.status', this).show().text(ajax_auth_object.loadingmessage);
        action = 'ajaxlogin';
        username =  $('form#login #username').val();
        password = $('form#login #password').val();
        email = '';
        security = $('form#login #security').val(); 
        ctrl = $(this);
        $.ajax({
            type: 'POST',
            dataType: 'json',
            url: ajax_auth_object.ajaxurl,
            data: {
                'action': action,
                'username': username,
                'password': password,
                'email': email,
                'security': security,
            },
            success: function (data) {
                $('p.status', ctrl).text(data.message);
                if (data.loggedin == true)
                  document.location.href = ajax_auth_object.redirecturl;
                else if (ctrl == 'register')
                  grecaptcha.reset();
            }
        });
        e.preventDefault();
    });

    $(".logreg-page form#login").validate({
        ignore: ".ignore",
       rules: {
         username: {
            required: true,
          },
          password: {
            required: true,
          },
       },
       messages: {
          username: "Please enter an username.",
          password: "Please enter your password.",
        },
    });
});

2 个答案:

答案 0 :(得分:0)

尝试此代码

function auth_user_login($user_login, $password, $login){
  $info = array();
  $info['user_login'] = $user_login;
  $info['user_password'] = $password;
  $info['remember'] = true;

  $user_signon = wp_signon( $info, false );
    if ( is_wp_error($user_signon) ){
    echo json_encode(array('loggedin'=>false, 'message'=>__('Wrong password or username.','my-theme')));
    } else {   
    $userID = $user_signon->ID;
    wp_set_current_user( $userID, $user_login );
    wp_set_auth_cookie( $userID, true, false );
    echo json_encode(array('loggedin'=>true, 'message'=> $login.__(' successful, redirecting...','my-theme')));
    }

  die();
}

答案 1 :(得分:0)

如果您的站点使用SSL,请将wp_signon函数的第二个参数设置为true。

class