User can not login

时间:2015-02-20 作者:Slimshadddyyy

我成功地向WP数据库插入了一个新用户,我希望该用户在此之后立即登录。我是这样做的

User Login Form

<?php  
     function dlf_form() {

?>


<form method="post" id="wp_login_form" action="<?php echo $_SERVER[\'REQUEST_URI\']; ?>">
    <div class="login-form">
        <div class="form-group">
                    <input name="login_name" type="email" class="form-control login-field" value="" placeholder="Email" id="login-name" required/>
            <label class="login-field-icon fui-user" for="login-name"></label>
        </div>

        <div class="form-group">
            <input name="login_password" type="password" class="form-control login-field" value="" placeholder="Password" id="login-pass" required/>
            <label class="login-field-icon fui-lock" for="login-pass"></label>
        </div>
            <input class="btn btn-primary btn-lg btn-block" type="submit" id="dlf_submit"  name="dlf_submit" value="Log in" />
        </div>
</form>

<p class="login-link">
<a href="<?php echo site_url(\'/register\'); ?>" title="Register">Register</a>&nbsp;|
<a href="<?php echo wp_lostpassword_url(); ?>" title="Lost your password?">Lost your password?</a>
</p>

<?php
}

function dlf_auth( $username, $password ) {

global $user;
get_currentuserinfo();
$creds = array();
$creds[\'user_login\'] = $username;
$creds[\'user_password\'] =  $password;
$creds[\'remember\'] = true;
$user = wp_signon( $creds, false );


if ( is_wp_error($user) ) {

       //get user email
       $email = $_POST[\'login_name\'];
       $users= get_user_by( \'email\', $email );//
       $key = \'user_login_status\';
       //get user login status
       $user_status = get_user_meta( $users->ID, $key);
       $user_approve = $user_status[0];
       $error_msg = \'\';

       //echo $user->get_error_message();exit;

       //if email does not exist in DB
       if(!email_exists( $email ) ){
       $error_msg = \'<div style="margin-bottom: 10px" class="btn btn-block btn-md btn-danger"><strong>ERROR: E-mail address does not exist.</strong></div>\';       

       //if user is not activated
       }elseif($user_approve == \'inactive\'){
       $error_msg = \'<div style="margin-bottom: 10px" class="btn btn-block btn-md btn-danger"><strong>ERROR: Your account has to be activated before you can login.</strong></div>\';

       //if invalid email or password
       }else{

           //echo $user->get_error_message();exit;
       $error_msg = \'<div style="margin-bottom: 10px" class="btn btn-block btn-md btn-danger"><strong>ERROR: Invalid e-mail address or password.</strong></div>\';
       }

       echo $error_msg;
    //echo $user->get_error_message();
} 

if ( !is_wp_error($user)) {
    wp_redirect(site_url().\'/overview\');
    exit();
}

}

function dlf_process() {
if (isset($_POST[\'dlf_submit\'])) {
    dlf_auth($_POST[\'login_name\'], $_POST[\'login_password\']);
}

dlf_form();
}

function dlf_shortcode() {
ob_start();
dlf_process();
return ob_get_clean();
}

add_shortcode(\'dm_login_form\', \'dlf_shortcode\');

?>



echo \'<pre>\';print_r($user);exit; this gives all the user details but user can not login it shows blank Login page. The  same code works on `localhost` but not on my staging server.
在检查页面源代码时,它会从我的主题的div下面暂停page.php

<div class="entry-content">

                        <?php the_content( __( \'Continue reading <span class="meta-nav">...</span>\', \'flat\' ) ); ?>

                        <?php wp_link_pages( array( \'before\' => \'<div class="page-links"><span class="page-links-title">\' . __( \'Pages:\', \'flat\' ) . \'</span>\', \'after\' => \'</div>\', \'link_before\' => \'<span>\', \'link_after\' => \'</span>\' ) ); ?>

                    </div>
在我的header.php 我已经使用了下面的代码,打印它会给我空值

<?php $current_user = wp_get_current_user();
print_R($current_user);exit;

?>

WP_User Object ( [data] => [ID] => 0 [caps] => Array ( ) [cap_key] => [roles] => Array ( ) [allcaps] => Array ( ) [filter] => ) 

1 个回复
SO网友:mikemanger

我认为wp_signon() 函数无法设置登录cookie,因为您是在发送页眉后调用它的。

尝试将身份验证代码移出dlf_process() 并转换为一个单独的函数,如下所示:

function dlf_login() {
    if ( isset( $_POST[\'dlf_submit\'] ) ) {
        dlf_auth( $_POST[\'login_name\'], $_POST[\'login_password\'] );
    }
}
add_action( \'after_setup_theme\', \'dlf_login\' );

结束