У меня проблемы с небольшой библиотекой OpenID под названием LightOpenID . Я могу пройти аутентификацию почти у всех поставщиков, но я не знаю, как получить данные от поставщика. Я получаю только Array(), eaven с print_r().PHP: LightOpenID, как получить данные учетной записи от поставщика?
ответ
Необходимо позвонить по телефону getAttributes()
после$openid->validate()
не раньше.
Помните:
Обратите внимание, что это не гарантирует, что любой из требуемых/необязательных параметров будет присутствовать
Я сделал вот так: http://pastebin.com/ULsLvhxp Итак, чтобы отобразить электронную почту, я использую $ foo ['email']? – Pwntus
Это будет '$ foo ['contact/email']' - согласно документам, атрибуты отображаются в формате AX. – Pete
Кроме того, '$ openid-> required = array ('contact/email');' необходимо вызывать ** перед ** '$ openid-> validate()' – Pete
Это, как я использую его. Это файл openid.php в папке lightopenid. В классе сделать следующие дополнительные функции -
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']; }
}
Теперь сделайте ваш пример файла login.php, который вызывается, когда вы хотите, чтобы проверить подлинность. Там может быть несколько копий этого файла для различных областей аутентификации и т.д.
<?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();
}
?>
Нам нужно больше информации ... как насчет говорит нам именно то, что вы пытались (как, скопировать и вставить код) и затем скажите нам результаты (как в, скопируйте и вставьте). – Narcissus
Извините, вот код: http://pastebin.com/kS9S4WVk Все работает очень хорошо, но в строке 39-41 я пытаюсь распечатать электронное письмо с текущей учетной записью. Результатом является «Массив()». – Pwntus
Ошибки сообщения/отображения ошибок? Вы проверили свой журнал ошибок PHP? – Narcissus