2016-04-18 6 views
4

Ich arbeite an WordPress Auto Login von YII2 Unten ist mein Code.WP Auto Login von Yii2 mit Curl funktioniert nicht beim ersten Laden

function.php (WP)

function autologin() 
{ 
    $strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/'; 
    session_write_close(); 
    $ch = curl_init("http://example.com/testregister/wplogin"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_COOKIE, $strCookie); 
    $response = curl_exec($ch); 
    curl_close($ch); 

    $newres = json_decode($response); 
    $email = $newres->email; 
    $password = $newres->password; 
    $result = $newres->result; 

    if($result == 1) 
    { 
     $creds = array(); 
     $creds['user_login'] = $email; 
     $creds['user_password'] = $password; 
     $creds['remember'] = false; 

     $user = wp_signon($creds); 

     if (is_wp_error($user)) 
     { 
      echo $user->get_error_message(); 
     } 
    } 
    else 
    { 
     wp_destroy_current_session(); 
     wp_clear_auth_cookie(); 
     do_action('wp_logout'); 
    } 
} 
// ADD CODE JUST BEFORE HEADERS AND COOKIES ARE SENT 
add_action('init', 'autologin'); 

testregister/wplogin: (YII2)

public function actionWplogin() 
    { 
     $userEmail = Yii::$app->user->identity->Email; 
     $userpw = Yii::$app->user->identity->Password; 
     $result = 1; 
     if($userEmail == "") 
     { 
      $result = 0; 
     } 

     return '{"email":"'.$userEmail.'", "password":"'.$userpw.'" ,"result":"'.$result.'"}'; 
    } 

Dieser Funktionsaufruf jedes Mal auf Last Wordpress-Seite. aber zum ersten Mal meldet es sich nicht an der Seite an.

Wenn ich wp_redirect(esc_url(home_url())); benutze die Login-Funktionalität funktioniert gut, aber WP-Admin funktioniert nicht nach der Verwendung von Redirect.

Antwort

4

Ich fand eine Lösung. unten Changed-Code in functions.php in der automatischen Anmeldung() Funktion

if (!is_user_logged_in()) 
     { 
      $creds = array(); 
      $creds['user_login'] = $email; 
      $creds['user_password'] = $password; 
      $creds['remember'] = false; 

      $user = wp_signon($creds); 

      if (is_wp_error($user)) 
      { 
       echo $user->get_error_message(); 
      } 
      wp_redirect(esc_url( "http://" . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])); 
      exit; 
     } 

, wenn der Benutzer nicht, dass die Zeit Login anmelden und die Seite umleiten. :)