Springe direkt: zur Navigationzum Inhaltzur Sidebar

Archiv für 'programmierung'

OpenId Attribute Exchange mit PHP und Janrain

22.05.2009

Ich habe in letzter Zeit wieder mehr mit OpenID gemacht und dabei “Attribute Exchange” entdeckt.
Diese OpenID Erweiterung ermöglicht es, Userdaten des Accounts an die anfragende Seite zu übertragen. Im Gegensatz zur verbreiteten sreg Erweiterung, unterstützt sie aber eine Reihe zusätzlicher Attribute (z.B. Trennung von Vorname und Nachname, mehrere Profil-Urls…). Neben Google (Doku) unterstützt auch myopenid diese Erweiterung.
Die Implementierung ist eigentlich recht schmerzfrei. Leider habe aber nirgends guten Beispielcode gefunden und die Dokumentation zu dem Thema ist insgesamt ungenügend, so dass ich die einfache Lösung unten erst mit viel Trial and Error gefunden habe:

Entscheidend war folgende Information (danke an Rakuno Futani):
Anders als in der Doku angebeben, muss als Namespace anscheinend http://schema.openid.net für die Attribute genutzt werden. Andere Namespaces, z.B. http://axschema.org/contact/email gunktionieren zumindest mit MyOpenid nicht. Erschwerend kommt während der Entwicklung hinzu, dass Google z.B. die Attribute nur bei der allerersten Anfrage  mitsendet und davon ausgeht, dass der anfragende Server diese Daten erfolgreich speichert. Eine leere Response heißt also nicht unbedingt, dass die Anfrage falsch war.

Hier die Beispielimplementierung mitilfe der Janrain PHP Library (die übrigens dringend mal als PHp5 Verison rauskommen sollte).

Request

Dem Request fügt man die AX-Erweiterung hinzu und gibt an, welche Userdaten geholt werden sollen.

<?php
  $axRequestProfileData = array(

    'email'   => 'http://schema.openid.net/contact/email',

    'username' => 'http://schema.openid.net/namePerson/friendly',

    'firstname'   => 'http://schema.openid.net/namePerson/first',

    'lastname'    => 'http://schema.openid.net/namePerson/last',

    'country' => 'http://schema.openid.net/contact/country/home',

    'birthday' => 'http://schema.openid.net/birthDate',

    'gender' => 'http://schema.openid.net/gender',

    'language'    => 'http://schema.openid.net/pref/language',

    'web'     => 'http://schema.openid.net/contact/web/default',

    'blog'     => 'http://schema.openid.net/contact/web/blog',

    'about' => 'http://schema.openid.net/media/biography',

    'image' => 'http://schema.openid.net/media/image/default',

    'fullname' => 'http://schema.openid.net/namePerson/'

  );
    $ax_request = new Auth_OpenID_AX_FetchRequest();    if ($ax_request) {

    foreach($axRequestProfileData as $alias => $url){

        $ax_request->add(Auth_OpenID_AX_AttrInfo::make($url, 1, true, $alias));

    }

    $request->addExtension($ax_request);

  }
?>

Response

Nach der Autentifizierung erhält man dann die Daten aus der Response so:

<?php

  $ax = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($response);

  var_dump($ax->data);

?>

Symfony unter MAMP

19.05.2009

Beim Antesten von MAMP in Kombination mit dem aktuellen Symfony 1.2 musste ich feststellen, dass laut phpinfo() in dem php auf der Konsole (CLI) PDO nicht aktiviert ist. Der symfony doctrine:build-sql task steigt mit entsprechender Fehlermeldung aus:

unable to find a mysql driver

Der schnellste (aber nicht schöne) Fix den ich im Symfony-Forum fand ist, einen harten symlink auf das MAMP-php zu setzen.

$ sudo ln -f /Applications/MAMP/bin/php5/bin/php /usr/bin/php

Alternativ kann man ohne in /usr/bin/ einzugreifen und ohne die Gefahr, dies nach dem nächsten Systemupdate wiederholen zu müssen, kann man einfach die PATH-Variable in der Datei “.bash_profile” im eigenen Homeverzeichnis ändern:

PATH=.:~/home/bin:/Applications/MAMP/bin/php5/bin/php:"${PATH}"

Danach eine neue Kosole öffnen, damit die Änderung auch greift und viel Spaß mit MAMP+Symfony.

JSON Topic Maps

13.01.2009

Robert Cerny erarbeitet gerade JSON Topic Maps (JTM) als ein leightweight Austauschformat für Topic Maps zwischen Rechnern. Mir kam der Gedanke, dass, sobald die Spezifikation für JTM 1.0 steht, eine Portierung nach YAML ein Leichtes sein dürfte. (Im Wikipedia-Artikel zu JSON wird JSON quasi als Untermenge von YAML bezeichnet, und das YAML-Projekt verweist auf JSON als ein verwandtes Projekt. Kurz: beide beschreiben ein sprachenunabhängiges, auch für Menschen lesbares Serialisierungsformat für Daten.)

YAML hat m.E. den Vorteil, dass es für Menschen (noch) besser lesbar ist als JSON und somit auch für das Authoring von Topic Maps in Frage kommt, was nicht der Zweck von JTM sein soll (http://www.cerny-online.com/jtm/1.0/#footnote-exchange).

Memory Limit in php.ini für Command Line erhöhen

10.12.2008

Hatte gestern mit einem kleinen Ärgernis zu kämpfen, das mir bisher nicht begegnet war: Wenn man PHP auf der command line (CLI) ausführt, wird unter Ubuntu für die Konfiguration eigentlich die Datei /etc/php5/cli/php.ini benutzt. Da ich für eine Anzahl an Unit Tests PHP mehr Speicher geben wollte, erhöhte ich den Wert Memory limit :

memory_limit = 512M

Leider wirkte die Änderung sich nicht aus. Mein  Testscript brach immer wieder mit einem “Memory Allocation Error” ab. Durch diesen Blogpost bin ich dann aber draf gekommen woran es lag:

Die php.ini muss für jeden User lesbar sein, sonst werden die Default Einstellungen benutzt, wenn man php nicht als root ausführt. Ein

chmod 644 /etc/php5/cli/php.ini

behebt das Problem.

You are currently browsing the archives for the programmierung category.

Creative Commons License
This work is licensed under a
Creative Commons Attribution-Share Alike 2.5 License.
t8d blogged mit WordPress