Implementace OpenID
Obecné povídání o OpenID si můžete přečíst např. ode mě na Flempu nebo od Arthura Denta hned na několika místech. Tady bych rád připsal pár tipů pro implementaci autentikace pomocí OpenID ve vaší Rails aplikaci.
Jak se dalo čekat, i na OpenID existuje plugin. Jeho použití však nebylo tak snadné, jak jsem čekal. Pár poznámek vám snad ušetří problémy, na které jsem narazil já.
Za prvé, plugin vyžaduje Edge Rails (někde to napsané je, u toho pluginu ale ne). Edge Rails zase vyžadují poslední verzi RubyGems, jinak vaše aplikace nebude fungovat. Dále, v příkladu použití pluginu je několik chyb, přečtěte si komentáře pod ním, bez popsaných úprav kód fungovat nebude.
Je nepravděpodobné, že byste chtěli použít přesně stejné metody jako jsou v příkladu (protože typicky už nějakou autentikaci v aplikaci máte, že). Při jejich modifikaci je dobré si pořádně rozmyslet, jak OpenID funguje. Je-li místo uživatelského jména a hesla zadáno OpenID (jak to zjistíte je specifické pro vaši aplikaci, já prostě jako OpenID chápu uživatelská jména začínající "http://"; podotýkám, že metoda této detekce je z příkladu u pluginu volána, její tělo ale uvedeno není), je řízení předáno metodě authenticate_with_open_id, která přesměruje prohlížeč na stránky poskytovatele OpenID, kde je uživatel požádán o zadání přístupových údajů. Tento server pak přesměruje uživatele zpět do vaší aplikace s informací, jak přihlášení dopadlo. Akci, do které je tento výsledek "doručen" specifikujete v routes.rb direktivou map.open_id_complete. Příklad u pluginu počítá s tím, že se vracíte do stejné metody jako při přihlašování. Zde je znovu zjištěno, je-li přihlašování prováděno pomocí OpenID a pokud ano, metoda authenticate_with_open_id už nikam nepřesměrovává, ale jen "vrátí" výsledek pokusu o příhlášení.
Problém je, že mi při druhém vstupu přihlašovací metody nebyly poslány parametry, které uživatel zadal do formuláře při přihlašování (s GET parametry to fungovalo dobře). Musel jsem si tedy tyto údaje uložit sám do session.
Doufám, že jsem alespoň někomu ušetřil pár hodin ladění a zkoumání.
Posted in Programování | no comments | atom