2011-10-20 3 views
6

Sto usando devise/omniauth per fare l'autenticazione con Facebook e funziona alla grande. Tuttavia, vorrei aggiungere un flusso in cui un utente esistente (non di Facebook) ha la possibilità di connettere il suo account con Facebook. Ciò richiederebbe diverse autorizzazioni di Facebook. quindi non riesco a trovare due coseUsando omniauth per collegare Facebook utente esistente con permessi diversi

  1. come utilizzare escogitare/omniauth richiedere Facebook Connect senza eseguire il logout dell'utente corrente
  2. richiesta
  3. diverse autorizzazioni estese da utente (diverse da quelle specificate nel file di configurazione escogitare

qualche idea? grazie

risposta

2

Risposta a 1 è piuttosto semplice: è sufficiente aggiungere un percorso, se nel metodo omniauth_callbacks_controller :: process_callback come questo

# If a user is signed in then he is trying to link a new account 
    if user_signed_in? 
     if authentication.persisted? # This was a linking operation so send back the user to the account edit page 
     flash[:success] = I18n.t "controllers.omniauth_callbacks.process_callback.success.link_account", 
           :provider => registration_hash[:provider].capitalize, 
           :account => registration_hash[:email] 
     else 
     flash[:error] = I18n.t "controllers.omniauth_callbacks.process_callback.error.link_account", 
           :provider => registration_hash[:provider].capitalize, 
           :account => registration_hash[:email], 
           :errors =>authentication.errors 
     end 
     redirect_to edit_user_account_path(current_user) 

Questo è quello che faccio nella mia applicazione e funziona benissimo.

Riguardo alla domanda 2 non so come supportare 2 diverse configurazioni di autenticazione di facebook, tuttavia ho difficoltà a vedere come ciò è utile per gli utenti poiché hanno bisogno di un'esperienza coerente su entrambi i percorsi: "accedi usando facebook" e "link" il tuo account su facebook ". (Se vuoi continuare su questa strada, un'idea che vorrei esplorare è creare una nuova applicazione Facebook con le sue chiavi indipendenti e configurazione ...)

Spero che questo aiuto.

+1

per rispondere "Ho difficoltà a vedere quanto sia utile per gli utenti poiché hanno bisogno di un'esperienza coerente", ci sono funzioni sul sito che richiederebbero più o meno autorizzazioni - ad esempio, se si desidera solo un accesso di base, chiederemo il minor numero di permessi. tuttavia, se si desidera qualcosa di più interessante (ad esempio ottenere alcuni dettagli dal profilo in considerazione), avremmo bisogno di chiedere ulteriori autorizzazioni. – katzmopolitan

0

Un modo semplice per implementare autorizzazioni multi-livello è utilizzare Facebook Javascript SDK (oltre a omniauth, se lo si desidera). Puoi semplicemente specificare un diverso parametro "scope", che specifica le autorizzazioni richieste, ad ogni chiamata che desideri. Quello che sto facendo è fare in modo che Omniauth fornisca un insieme di permessi di base, quindi dopo l'utente si è connesso tramite omniauth (e quindi ha memorizzato i propri dati nel nostro DB), se sono necessarie ulteriori autorizzazioni, mostriamo loro i pulsanti basati su JS che forniscono serie espanse di permessi. Se si desidera verificare quali autorizzazioni concesse all'utente è stato concesso, è sufficiente utilizzare la chiamata all'API me/permissions.