Leave a Reply

5 comments

  1. After using wp_signon(), the user info is not set, which is how WP checks for a user in is_user_logged_in(). It should be just a matter of calling get_currentuserinfo() after wp_signon().

  2. I’ve had same problem. Here the full working snippet that fixed that problem:

        if( isset($_POST['log']) && isset($_POST['pwd']) ):
          $creds = array( 'user_login' =>  $_POST['log'], 'user_password' => $_POST['pwd'], 'remember' => $_POST['rememberme'] );
          $user = wp_signon( $creds, false );
          if ( is_wp_error($user) ): echo $user->get_error_message(); endif;
          wp_set_current_user($user->ID);
          return $user;
        endif;
    

    Also wp_logout() has same problem. Here how to make it work too:

    wp_logout();  
    wp_set_current_user(0);
    
  3.  //the function wp_signon is under construction yet if you open wordpress core files
     //you will find this comment
    
     // TODO do we deprecate the wp_authentication action?
    
     //i figured out a solution
     function login_after_register($userlogin,$userpass){
    $credentials = array( 'user_login' =>  $userlogin, 'user_password' => $userpass, 'remember' => true );
    
    $secure_cookie = is_ssl();
    
    $secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
    add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);
    
    $user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
    wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
    do_action('wp_login', $user->user_login, $user);
     }
     //then you should call it this way
     //before get_header() or any html
     login_after_register($_POST['r_user_name'],$_POST['r_password']);
    
  4. Just set the second parameter to true. Set false will prevent wp_signon() from setting secure cookie which is essential for accessing wp-admin.

    $user = wp_signon( $credentials, true );