2016-03-20 14 views
0

Ich versuche derzeit, eine Single Sign On-Seite zu erstellen, auf der sich der Benutzer nach der Anmeldung entweder über Facebook oder Google+ auf die Providerseite umleitet und nach erfolgreicher Anmeldung wieder zur index.php umleitet Seite? ˅. Nun ist das Problem, ich möchte wissen, gibt es Möglichkeiten, um zu überprüfen, ob der Benutzer angemeldet ist. Beispiel, sobald sich der Benutzer anmeldet, sollte sich die Login-Schaltfläche in Logout ändern. Kann ich das wissen? Danke im Voraus.PHP SSO Sitzung prüfen

<nav id="menu"> <!-- Navigation --> 
    <ul id="tabs"> <!-- unordered list --> 
     <li><a href="index.html">Home</a></li> 
     <li><a href="about.html">About</a></li> 
     <li><a href="contact.html">Contact Us</a></li> 
     <li><a href="login.php">Login</a></li> 
     <ul class="nav navbar-nav navbar-right" > 
      <li style="float:right;list-style-type:none;"> 
       <a class="janrainEngage" href="#"> 
        <img src="<?php echo $_GET['photo']; ?> " height="30" width="30"/> 
        <?php echo $_GET['name'];?> 
       </a> 
      </li> 
     </ul> 
    </ul> 
</nav> 

Das ist mein login.php Code:

<?php 
// Below is a very simple and verbose PHP script that implements the Engage 
// token URL processing and some popular Pro/Enterprise examples. The code below 
// assumes you have the CURL HTTP fetching library with SSL. 
require('helpers.php'); 

ob_start(); 

// PATH_TO_API_KEY_FILE should contain a path to a plain text file containing 
// only your API key. This file should exist in a path that can be read by your 
// web server, but not publicly accessible to the Internet. 
$janrain_api_key = trim(file_get_contents('apiKey.txt')); 

// Set this to true if your application is Pro or Enterprise. 
$social_login_pro = false; 

// Step 1: Extract token POST parameter 
$token = $_POST['token']; 

if ($token) { 
    // Step 2: Use the token to make the auth_info API call. 
    $post_data = array(
     'token' => $token, 
     'apiKey' => $janrain_api_key, 
     'format' => 'json' 
    ); 

    if ($social_login_pro) { 
     $post_data['extended'] = 'true'; 
    } 

    $curl = curl_init(); 
    $url = 'https://rpxnow.com/api/v2/auth_info'; 
    $result = curl_helper_post($curl, $url, $post_data); 
    if ($result == false) { 
     curl_helper_error($curl, $url, $post_data); 
     die(); 
    } 
    curl_close($curl); 

    // Step 3: Parse the JSON auth_info response 
    $auth_info = json_decode($result, true); 

    if ($auth_info['stat'] == 'ok') { 
     echo "\n auth_info:"; 
     echo "\n"; var_dump($auth_info); 

     // Pro and Enterprise API examples 
     if ($social_login_pro) { 
      include('social_login_pro_examples.php'); 
     } 

     // Step 4: Your code goes here! Use the identifier in 
     // $auth_info['profile']['identifier'] as the unique key to sign the 
     // user into your system. 
     //echo '<pre>'.print_r($auth_info).'</pre>'; 
     $name = $auth_info['profile']['displayName']; 
     $address = $auth_info['profile']['address']['formatted']; 
     $photo = $auth_info['profile']['photo']; 
     $redirect = "http://localhost:8012/cm0655-assignment/index.php?photo=".$photo; 
     header('Location: '.$redirect); 
    } else { 
     // Handle the auth_info error. 
     output('An error occurred', $auth_info); 
     output('result', $result); 
    } 
} else { 
    echo 'No authentication token.'; 
} 
$debug_out = ob_get_contents(); 
ob_end_clean(); 
?> 
<html> 
    <head> 
     <title>Janrain Token URL Example</title> 
    </head> 
    <body> 
     <pre><?php echo $debug_out; ?></pre> 
    </body> 
</html> 

Antwort

1

In Ihrem Beispiel darüber Sie die clientseitige JanRain Social Login haben scheint (Engage) Widget das Authentifizierungstoken zu Ihrem Server läuft Post die PHP-Seite. In diesem Szenario wird das vom clientseitigen Widget abgerufene Token an Ihre PHP-Seite gesendet, wo die PHP-Seite einen Server-Side-Curl-Aufruf an den API-Endpunkt "auth_info" von Janrain Social Login sendet. Dieser Aufruf bestätigt, dass das Token gültig ist, und gibt die normalisierten sozialen Profildaten des Benutzers an die Serverseite zurück.

In diesem Szenario würde die serverseitige Seite das Ergebnis analysieren, und wenn es gültig ist, würde die serverseitige Seite ein "Flag" setzen, um anzuzeigen, dass der Benutzer sich erfolgreich angemeldet hat. Es gibt viele Möglichkeiten zum Speichern der Authentifizierungszustand:

  • die sicherste ist eine Form von serverseitigen Sitzungsvariable, dass Ihr serverseitigen Code validiert gegen immer.
  • Schreiben Sie Code als Teil des Ergebnisses, das einen Cookie setzt, oder localStorage, um anzugeben, dass der Benutzer authentifiziert wurde.

Letztendlich ist die Verwaltung des authentifizierten Status ein Implementierungsdetail, das Ihnen überlassen ist. Das Janrain Social Login (Engage) Widget vereinfacht und normalisiert den sozialen Login-Prozess und ermöglicht es Ihnen als Entwickler, nicht alle verschiedenen APIs für mehrere Social Login-Anbieter zu implementieren. Das Janrain Social Login-Widget verwaltet den Authentifizierungsstatus nicht.

Um speziell, Ihre Frage in Bezug auf die Login/Logout-Taste zu beantworten - Sie hätten ein clientseitig Javascript, das die Einstellung eines Cookies erkannt und schaltet den Text/CSS auf der Schaltfläche oder Sie könnten Ihre serverseitige Seite haben Fügen Sie den erforderlichen clientseitigen JavaScript-Code auf der Seite ein. Eine robustere Option würde wahrscheinlich AJAX-Aufrufe verwenden, um das Token zu posten und das Ergebnis zu empfangen und anschließend den Status der Schaltfläche zu aktualisieren.