Ich habe Probleme mit einer kleinen OpenID-Bibliothek namens LightOpenID . Ich kann mich bei fast allen Providern authentifizieren, aber ich weiß nicht, wie ich die Daten vom Provider holen soll. Ich bekomme nur Array(), eaven mit print_r().PHP: LightOpenID, wie man Konto Daten vom Anbieter holt?
Antwort
Sie müssen vor getAttributes()
nach$openid->validate()
nicht nennen.
Denken Sie daran:
Beachten Sie, dass es nicht garantiert, dass eine der erforderlichen/optionalen Parameter vorhanden sein wird
Ich habe das jetzt so gemacht: http://pastebin.com/ULsLvhxp Also um die E-Mail anzuzeigen, verwende ich $ foo ['email']? – Pwntus
Es wird '$ foo ['contact/email']' sein - laut den Dokumenten sind die Attribute dem AX-Format zugeordnet. – Pete
$ $ openid-> required = Array ('contact/email'); 'muss ** vor **' $ openid-> validate() ' – Pete
Dies ist, wie ich es verwenden. Dies ist die Datei openid.php im Ordner lightopenid. In der Klasse die folgenden zusätzlichen Funktionen -
class LightOpenID
{
public $returnUrl
, $required = array()
, $optional = array()
, $verify_peer = null
, $capath = null
, $cainfo = null;
// these are the variables which store the data about the user...
public function ret_fname() { return $this->data['openid_ext1_value_namePerson_first']; }
public function ret_lname() { return $this->data['openid_ext1_value_namePerson_last']; }
public function ret_email() { return $this->data['openid_ext1_value_contact_email']; }
public function ret_lang() { return $this->data['openid_ext1_value_pref_language']; }
}
nun Ihre Datei Beispiel login.php machen, die aufgerufen wird, wenn Sie authentifizieren möchten. Es könnte für verschiedene Authentifizierungsdomänen usw.
<?php
# Logging in with Google accounts requires setting special identity, so this example shows how to do it.
session_start();
require 'lightopenid/openid.php';
include_once('config.php'); // initial setting file
try {
$openid = new LightOpenID; // akshat - declared an object of class lightopenid.. this is listed in openid.php
if(!$openid->mode) {
if(isset($_GET['login'])) {
$openid->identity = 'https://www.google.com/accounts/o8/site-xrds?hd=YourDomain.in'; //this can be changed as you know...
$openid->required = array('namePerson/friendly', 'contact/email' , 'contact/country/home', 'namePerson/first', 'pref/language', 'namePerson/last'); // akshat - line added by me from after reading from the net....
header('Location: ' . $openid->authUrl());
}
?>
<script type="text/javascript" src="js/jquery-1.4.2.min.js" language="javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
document.form.submit();
});
</script>
<form name="form" action="?login" method="post"> </form>
<?php
} elseif($openid->mode == 'cancel') {
echo 'User has canceled authentication for Your Domain !';
} else { // FETCH USER INFO HERE
$fname = $openid->ret_fname(); // fetching user first name...
$lname = $openid->ret_lname(); // fetching user last name...
$email = $openid->ret_email(); // fetching user email...
$lang = $openid->ret_lang(); // fetching user language...
session_start();
// use it as required. I set them in session !
$_SESSION['admin']['emailID'] = $email; //put email id in session.
$_SESSION['admin']['fname'] = $fname; //put first name also in session.
$_SESSION['admin']['lname'] = $lname; //put last name also in session.
$rurl = $_SESSION['redirect']; // you can ignore this. Go to your own page now...
header("Location:$rurl"); // Go back to the calling application !
}
} catch(ErrorException $e) {
echo $e->getMessage();
}
?>
mehrere Kopien dieser Datei werden wir mehr Informationen benötigen ... wie wäre es uns genau zu sagen, was Sie versucht haben (wie in, kopieren und Ihren Code einfügen) und dann teilen Sie uns die Ergebnisse mit (z. B. Kopieren und Einfügen). – Narcissus
Entschuldigung, hier ist der Code: http://pastebin.com/kS9S4WVk Alles funktioniert ziemlich gut, aber in Zeile 39-41 ich versuche, die E-Mail des aktuellen Kontos zu drucken. Das Ergebnis ist "Array()". – Pwntus
Sind Fehlermeldungen/Anzeigefehler an? Hast du dein PHP-Fehlerprotokoll überprüft? – Narcissus