OAuth / adattatore Twitter Auth per Zend Framework
Il lavoro continua (lentamente) sul mio nuovo Twitter basato applicazione. Nel corso dei prossimi due giorni festivi spero di ottenere il nuovo slancio del progetto (in-nonostante il bel tempo al momento). Comunque, il mio prossimo compito era quello di creare un adattatore di autenticazione per il Framework Zend . Ho avuto una implementazione funzionante di login, ma avendo un calo di adattatore Auth per Zend Framework sembrava una proposta allettante, così l'ho creato ....
(Non ho intenzione di passare attraverso OAuth o la registrazione con l'applicazione Twitter, ci sono centinaia di guide e il suo un processo comunque abbastanza semplice.)
La differenza tra OAuth e gli adattatori authenication altri Zend Framework è che OAuth richiede riorientare avanti e indietro tra il prestatore e il server OAuth richiesta dal cliente. Pertanto, il processo non è così semplice come semplicemente cercando su alcuni dettagli in un database o controllare le intestazioni di richiesta. Fortunatamente i componenti di Zend Framework, come Zend_Oauth_Consumer , prendere gran parte della via il dolore e la sua solo il lavoro della scheda di autorità per effettuare le chiamate metodo richiesto.
Per una guida all'uso Zend_Auth e l'autenticazione esibendosi con Zend Framework è una ricerca su Google, o controllare questo tutorial da Matthew Weier O'Phinney - Login e autenticazione .
Utilizzo
Al fine di utilizzare l'adattatore di autenticazione è necessario passare due oggetti in via di costruzione. Il primo è un 'istanza di Zend_Oauth_Consumer istituito per il provider di OAuth. Ho fatto questo con il servizio di Twitter e si può vedere un pezzo veloce che qui - Entra con Twitter utilizzando Zend Framework . Sto utilizzando la mia implementazione dove ho impostato il "URL Autorizzo", come io non voglio dell'utente di essere invitato a dare il permesso per l'applicazione ogni volta che tenta di entrare. Il secondo parametro è un 'istanza di Zend_Session_Namespace che viene creata un'istanza con lo spazio dei nomi in cui si desidera collocare i dati di autenticazione. Nel mio codice ho qualcosa di simile al seguente:
$ Config = array ( 'CallbackUrl' => ... richiamata-url ... 'Siteurl' => 'https: / / twitter.com / OAuth', 'ConsumerKey' => ... dei consumatori-key ..., 'ConsumerSecret' => ... a chiave segreta ... ); $ Consumatore = Zend_Oauth_Consumer nuovo ($ config); setAuthorizeUrl $ consumatore-> ('https: / / twitter.com / OAuth / autenticare'); $ Sessione = new Zend_Session_Namespace (Pro_Auth_Adapter_Twitter:: AUTH_NAMESPACE); $ AuthAdapter = Pro_Auth_Adapter_Oauth nuovo ($ consumatore, $ sessione);
Calling ->authenticate() sulla scheda sarà poi causa un reindirizzamento al provider OAuth (di nuovo nel mio caso, Twitter). Al suo ritorno l'applicazione della seconda chiamata a ->authenticate() sarà effettivamente eseguire la stessa autenticazione.
Se si voleva all'utente di tornare alla pagina initally chiesto quindi fornito il proprio stato di autenticazione viene verificata in ogni richiesta quindi semplicemente impostando il parametro appropriato 'callBackUrl' in fase di caricamento otterrebbe l'utente verso la destinazione inizialmente prevista.
Un ultima caratteristica che ho aggiunto è stata la possibilità di inviare ulteriori parametri utilizzando la addParameter() e setParameters() metodi. L'aggiunta di questa funzionalità permette l'invio di ulteriori parametri GET al momento della iniziale redirect al provider OAuth. Nel mio caso, questo mi permette di passare un array con una chiave di 'force_login' e il valore del vero, che le forze di Twitter per richiedere nuovamente il login (anche se già effettuato il login), che è grande per-linked-account applicazioni multi.
Il codice è disponibile sul mio repo GitHub - auth adattatore OAuth per Zend Framework codice (commenti benvenuto!).
Edit: Sembra che qualcun altro è stato sul caso. Per vedere un'altra implementazione http://www.jasonawesome.com/2010/11/24/authenticating-to-twitter-with-zend_auth/


















































