Oauth / Twitter Auth Adapter för Zend Framework
Arbetet fortsätter (sakta) på min nya Twitter -baserad applikation. Under de närmaste helgdagar jag hoppas att få tempot uppe igen på projektet (i-trots det underbara vädret i nuläget). Hur som helst, nästa uppgift var min att skapa en autentisering adapter för Zend Framework . Jag hade en fungerande inloggning genomförande, men att ha en droppe i Auth adapter för Zend Framework som kändes som ett attraktivt förslag, så jag skapade det ....
(Jag tänker inte gå igenom OAuth eller registrera din ansökan med Twitter, det finns hundratals guider och det är en tämligen okomplicerad process ändå.)
Skillnaden mellan OAuth och andra adaptrar authenication i Zend Framework är att OAuth kräver styra fram och tillbaka mellan oauth leverantören och den ansökande servern av kunden. Därför processen är inte riktigt lika rakt fram som helt enkelt titta upp några detaljer i en databas eller kontroll begäran rubriker. Lyckligtvis Zend Framework komponenter, såsom Zend_Oauth_Consumer , tar mycket av smärtan borta och det bara en uppgift för myn-adapter för att göra de nödvändiga metodanrop.
För en guide till att använda Zend_Auth och utför autentisering med Zend Framework har en sökning på google, eller kolla den här guiden av Matthew Weier O'Phinney - Logga in och autentisering .
Användning
För att kunna använda autentisering adapter du behöver för att klara två objekt in via konstruktorn. Den första är en instans av Zend_Oauth_Consumer ställa upp för ditt OAuth leverantör. Jag har gjort detta med Twitter om service och du kan se en snabb pjäs om att här - Logga in med Twitter använder Zend Framework . Jag använder min genomförandet där jag ställer in "Auktorisera URL" som jag inte vill användarens bli tillfrågad att ge tillstånd till ansökan varje gång de försöker logga in. Den andra parametern är en instans av Zend_Session_Namespace som instansieras med namnutrymmet som du vill placera autentisering detaljer. I min kod jag har något i stil med följande:
$ Config = array ( "CallbackUrl '=> ... callback-url ..., "SITEURL '=>' https: / / twitter.com / oauth" "ConsumerKey '=> ... konsument-nyckel ..., "ConsumerSecret '=> ... hemlig-nyckel ..., ); $ Konsument = new Zend_Oauth_Consumer ($ config); $ Konsument-> setAuthorizeUrl ("https: / / twitter.com / oauth / verifiera"); $ Session = new Zend_Session_Namespace (Pro_Auth_Adapter_Twitter:: AUTH_NAMESPACE); $ AuthAdapter = new Pro_Auth_Adapter_Oauth ($ konsument $ session);
Calling ->authenticate() på adaptern kommer då att leda en omdirigering till OAuth leverantören (återigen i mitt fall Twitter). Efter att ha återvänt till ansökan på det andra samtalet till ->authenticate() faktiskt kommer att utföra autentisering själv.
Om du ville användaren att återvända till ursprungligen kommit efterfrågade sidan då förutsatt att din autentisering status kontrolleras på varje förfrågan då helt enkelt att ställa in lämplig "callBackUrl" parameter vid laddningen skulle få användaren att den ursprungligen var avsedd destination.
En sista funktion som jag lagt var möjligheten att skicka ytterligare parametrar med hjälp av addParameter() och setParameters() metoder. Lägga denna funktion gör det möjligt att skicka ytterligare GET parametrar då man först omdirigeras till den OAuth leverantören. I mitt fall ger detta mig att passera en array med en nyckel av "force_login" och värdet true som tvingar Twitter för att be dig logga in igen (även om den redan är inloggad) vilket är bra för multi-kopplade-konto applikationer.
Koden finns tillgänglig på min GitHub reporänta - OAuth auth adapter för Zend Framework kod (kommentarer välkomna!).
Edit: Ser ut som någon annan har varit på fallet också. För en annan implementering se http://www.jasonawesome.com/2010/11/24/authenticating-to-twitter-with-zend_auth/


















































