我遇到了一个问题,ajax登录表单允许我登录。如果我在登录后将重定向设置为主页,它会将我发送到主页,并在顶部为我提供管理栏。但是,如果我尝试转到管理仪表板,它会要求我使用正常的wordpress登录再次登录。
如何解决这个问题?我的代码:
在页面登录中。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>
在函数中。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脚本。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.",
},
});
});