2016-06-28 21 views
0

Ich habe zwei Wordpress-Websites auf Sub-Domain eines Servers mit wie http://first.mywebsites.net und http://second.mywebsites.netLink für die Anmeldung von zwei völlig getrennten Wordpress-Websites

Beide sind ebenso wie private Seiten, kann ich die Inhalte der Seiten, sehen, ob ich bin in die Website eingeloggt, ansonsten auf die Anmeldeseite umgeleitet.

Nun, was ich will, ist, wenn ich meine erste Website anmelden und auf den Link der zweiten Website im selben Browser gehen, dann kann ich den Inhalt der Seiten als angemeldeter Benutzer sehen.

Dies muss nur in einem Fall geschehen, wenn der Benutzer, der in der ersten Website angemeldet ist, den gleichen Benutzer (Benutzer mit der gleichen Mail-ID registriert) in der Datenbank der zweiten Website hat. Wie im Falle meiner Website, sind die meisten Benutzer mit der gleichen Mail-ID in beiden Websites registriert.

dies durch zwei Ansätze zu erreichen versuchen, aber nach wie vor nicht in der Lage, dies zu erhalten, indem einer von ihnen:

Ansatz 1: eine Tabelle zweiter Website Hinzufügen und den Benutzer E-Mail und einen Auth-Schlüssel zu speichern. Mit curl, um die Details zu holen und dann eingeloggt. Dieser Ansatz ist wie hier erwähnt: http://carlofontanos.com/auto-login-to-wordpress-from-another-website

Aber wie ich es zuvor erwähnt habe, dass sowohl die Website in meinem Fall privaten Inhalt haben, also in diesem Fall ich Ich bin nicht in der Lage, die Details mit Curl zu holen. Mein Code für curl ist wie:

$api_url = "http://second.mywebsites.net/autologin-api/"; 

    // If you are using WordPress on website A, you can do the following to get the currently logged in user: 
    global $current_user; 

    $user_email = $current_user->user_email; 

    // Set the parameters 
    $params = array(
     'action'   => 'get_login_key', // The name of the action on Website B 
     'key'    => '54321', // The key that was set on Website B for authentication purposes. 
     'user_email'  => $user_email // Pass the user_email of the currently logged in user in Website A 
    ); 
// Send the data using cURL 
    $ch = curl_init($api_url); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $gbi_response = curl_exec($ch); 
    curl_close($ch); 

    // Parse the response 
    parse_str($gbi_response); 
    print_r($gbi_response); 

In diesem Fall bin ich nicht die Antwort bekommen, meine Seite meHauptseite der zweiten Website zur Anmeldung umleiten.

Ansatz 2: Versuchen Sie es mit der Verwendung von Cookies zu tun, wie ich auf der zweiten Website im selben Browser angemeldet sein möchte.

global $current_user; 
$user_email = $current_user->user_email; 
if($user_email != ''){ 
    $_COOKIE['current_user_mail_id'] = $user_email; 
} 
echo "<pre>"; 
print_r($_COOKIE); 
echo "</pre>"; 

und Keksen zeigen mit den anderen Cookies: Ich habe ein neues Cookie in meiner ersten Website wie hinzugefügt. Aber wenn ich diese Überprüfung in meiner zweiten Website auf demselben Browser wie:

echo "<pre>"; 
print_r($_COOKIE); 
echo "</pre>"; 

Das Cookie, das ich in meiner ersten Website hinzugefügt habe, zeigt nicht auf meiner zweiten Website. Ich bin nicht sehr vertraut mit Cookies, Einstellung auth Cookies usw.

Bitte schlagen Sie eine Lösung, wie kann ich das erreichen.

+0

Können Sie OpenID integrieren? Es gibt ein [plugin] (https://wordpress.org/plugins/openid/). – SilverlightFox

Antwort

0

Sie können dies mit "Single Signon" erreichen.

Befehls-

Zur Vereinfachung der Benutzer zwischen unseren Systemen vorbei ich diese PHP-Klasse erstellt haben , die Sie gerne benutzen.

Um zu überprüfen, ob ein Benutzer angemeldet ist: $ signon = new SingleSignon(); $ userId = $ signon-> checkCookie(); if ($ userId) {// Benutzer angemeldet ist, und dies ist ihre ID } else { // Benutzer nicht angemeldet ist oder sie sind exipred }

Wenn der Benutzer nicht in dann angemeldet ist Verwenden Sie unsere API, um sich anzumelden, und verwenden Sie den folgenden Code, wenn der API-Aufruf erfolgreich ist.

Um einen Benutzer als eingeloggt zu setzen: $ signon = new SingleSignon(); $ signon-> setCookie ($ userId);

HINWEIS: Sie müssen SSL verwenden, damit der Cookie gelesen werden kann.

+0

danke Gaurav Bansal für Ihre schnelle Antwort..Ihr Code sieht richtig aus. Aber mein Szenario ist ein bisschen anders, ich habe Zugriff auf beide Webseiten. Ich habe eine Lösung für Wordpress-Webseiten vorbereitet, die eine Idee von Ihrem Code nehmen, die Sie hier sehen können: http://www.wptricks24.com/auto-login-one-website-another-wordpress – WpTricks24

0

Ich habe die von Gaurav gelieferte Lösung durchgespielt und finde eine Idee, dies für Wordpress-Websites zu ermöglichen.

Platz unten genannten Code an dem Ort, an dem Sie den Link setzen wollen, um Ihre zweite Seite zu gehen:

<?php global $current_user; 
           $user_email = $current_user->user_email; 
           $user_login = $current_user->user_login; 
           if($user_email != ''){ 
            $email_encoded = rtrim(strtr(base64_encode($user_email), '+/', '-_'), '='); 
            $user_login_encoded = rtrim(strtr(base64_encode($user_login), '+/', '-_'), '='); 
            echo '<div class="dtNode"><a href="http://second.mywebsites.net/sso.php?key='.$email_encoded.'&detail='.$user_login_encoded.'" target="_blank">Link to second website</a></div>'; 
         }?> 

nun eine sso.php Datei und legen Sie sie an die Wurzel Installation Ihrer zweiten Standort vorbereiten wo Sie sich automatisch einloggen möchten. Jetzt den folgenden Code dort eingeben:

<?php 

require_once('wp-load.php'); //put correct absolute path for this file 


global $wpdb; 

if(isset($_GET['key']) && !empty($_GET['key'])){ 

    $email_decoded = base64_decode(strtr($_GET['key'], '-_', '+/')); 
    $username_decoded = base64_decode(strtr($_GET['detail'], '-_', '+/')); 

    $received_email = sanitize_text_field($email_decoded); 
    $received_username = sanitize_text_field($username_decoded); 


    if(email_exists($received_email)) { 

      //get the user id for the user record exists for received email from database 
      $user_id = $wpdb->get_var($wpdb->prepare("SELECT * FROM wp_users WHERE user_email = %s", $received_email)); 

      wp_set_auth_cookie($user_id); //login the user 

      wp_redirect('http://second.mywebsites.net'); 

    }else { 

      //register those user whose mail id does not exists in database 

      if(username_exists($received_username)){ 

       //if username coming from first site exists in our database for any other user, 
       //then the email id will be set as username 
       $userdata = array(
       'user_login' => $received_email, 
       'user_email' => $received_email, 
       'user_pass' => $received_username, // password will be username always 
       'first_name' => $received_username, // first name willl be username 
       'role'  => 'subscriber'  //register the user with subscriber role only 
      ); 

      }else { 

       $userdata = array(
       'user_login' => $received_username, 
       'user_email' => $received_email, 
       'user_pass' => $received_username, // password will be username always 
       'first_name' => $received_username, // first name willl be username 
       'role'  => 'subscriber'  //register the user with subscriber role only 
      ); 

      } 


      $user_id = wp_insert_user($userdata) ; // adding user to the database 

      //On success 
      if (! is_wp_error($user_id)) { 

       wp_set_auth_cookie($user_id); //login that newly created user 
       wp_redirect('http://second.mywebsites.net'); 

      }else{ 

       echo "There may be a mismatch of email/username with the existing record. 
         Check the users with your current email/username or try with any other account.";die; 
      } 


    } 

    die; 

} ?> 

Der obige Code funktioniert für mich, Sie können den Code nach Ihren Bedürfnissen ändern. Für eine klarere Erklärung können Sie hier überprüfen: http://www.wptricks24.com/auto-login-one-website-another-wordpress