2012-01-02 3 views
6

Sto utilizzando omniauth esclusivamente per consentire l'accesso al mio sito Web con facebook/google/twitter.Nome/Cognome/Email da Twitter utilizzando OAuth

Memorizzo nome, cognome e indirizzo email. Tuttavia, quando sollevo l'hash auth di twitter da oauth, ottengo solo nickname, nome, posizione, immagine, descrizione e url nell'hash auth.

C'è un ambito che posso passare nel mio inizializzatore per ottenere l'email dell'utente e il nome di interruzione nei campi first_name, last_name?

risposta

8

Twitter non dà messaggi di posta elettronica degli utenti in modo da non essere in grado di ottenere tali informazioni dal API di Twitter. Invece, devi chiedere all'utente di digitare il loro indirizzo email sul modulo di iscrizione.

Per quanto riguarda la divisione del nome fino, si farebbe che una volta che hai l'hash restituita utilizzando qualcosa di simile:

social_params ||= request.env["omniauth.auth"] 
fullname = social_params["user_info"]["name"].split(' ') 
first_name, last_name = fullname[0], fullname[1] 
puts "first name is #{first_name} and last name is #{last_name}" 

Basta tenere a mente che potrebbe essere last_namenil se non hanno un spazio nel loro nome o non hanno dato un cognome. Questo inoltre non considera il fatto che molte persone abbiano più cognomi in altre culture.

+0

Grazie mille. Non sono abbastanza sicuro su come gestire la richiesta dell'indirizzo email dopo la richiamata - Sono abbastanza nuovo per le rotaie e al momento solo la sessione crea azione gestirla in un colpo solo senza interazione dell'utente. Probabilmente un'altra domanda per SO. – Rapture

+0

Sfortunatamente, Twitter ti obbliga a utilizzare un ulteriore passaggio per la tua procedura di registrazione non assegnando l'indirizzo email. Dovresti reindirizzare l'utente a un modulo di iscrizione chiedendo loro il loro indirizzo di posta elettronica oppure utilizzare un servizio di registrazione diverso come Facebook che fornisce l'indirizzo email se vuoi che sia senza problemi. – iwasrobbed

+0

Sì, attualmente sto usando Facebook e Google. Probabilmente finirò per perdere Twitter a causa di questo. – Rapture

0

Se si dispone di un'integrazione con FB, Google e Twitter, sarà necessario avere un primo e l'ultimo nel DB (se l'interfaccia utente lo richiede> il mio caso). Questo è ciò che mi è venuta in alcuni paesi hanno le persone con più di 2 gettoni per la loro nomi ex: (Marco De Franca Solis) o (Marco, De Franca Solis)

// + TEST CASES 
var name1 = handleName("Marco De Franca Solis") 
var name2 = handleName("first,last wer wer") 
var name3 = handleName("aName") 
var name4 = handleName("") 
// - TEST CASES 

handleName = function(input) { 
    var n=input.indexOf(" "); 
    n += input.indexOf(","); 
    var result = {}; 
    if(n < 0){ 
     result.first = input 
     result.last = "" 
    } 
    else{ 
     arr = input.split(/[ ,]+/); 
     result.first = arr[0] 
     result.last = "" 
     if(arr.length > 1) 
     { 
      arr[0] = "" 
      result.last = arr.join(" "); 

     } 
    } 

    return result 
} 
0

OmniAuth ti dà tutti i nomi combinato in una stringa. Ma alcune persone hanno più di nomi di due parole, come "John Clark Smith". Si può scegliere di trattare coloro che in tre diversi modi:

(1) first_name: "John", cognome: "Smith"

def first_name 
    if name.split.count > 1 
     name.split.first 
    else 
     name 
    end 
    end 

    def last_name 
    if name.split.count > 1 
     name.split.last 
    end 
    end 

(2) first_name: "John Clark", cognome: "Smith "

def first_name 
    if name.split.count > 1 
     name.split[0..-2].join(' ') 
    else 
     name 
    end 
    end 

    def last_name 
    if name.split.count > 1 
     name.split.last 
    end 
    end 

(3) first_name: "John", cognome: "Clark Smith"

def first_name 
    name.split.first 
    end 

    def last_name 
    if name.split.count > 1 
     name.split[1..-1].join(' ') 
    end 
    end 

Gli esempi sopra riportati per scontato che se il nome contiene meno di 2 parole, quindi è un nome. Questa domanda è simile a this one

0

per l'uso php:

$names = explode(' ',$socialData->firstName); 
$socialData->firstName=array_shift($names); 
$socialData->lastName=implode(' ',$names); 

essere a conoscenza del nome potrebbe avere più cognomi e possibilmente più firstnames, il presente con più cognomi, ma non firstnames.

2

L'utilizzo dell'API di Twitter corrente è possibile ricevendo l'e-mail. Devi compilare un modulo per richiedere tale autorizzazione.Il processo è semplice e veloce, viene spiegato here.

Per richiedere l'indirizzo di posta elettronica di un utente è necessario che la propria applicazione sia autorizzata da Twitter. Per richiedere l'accesso, si prega di utilizzare questo modulo.

volta whitelist, gli “indirizzi e-mail Richiedere agli utenti di” casella di controllo saranno disponibili sotto le autorizzazioni delle app su apps.twitter.com. I campi dell'URL e dei termini del servizio sulla privacy saranno disponibili anche nelle impostazioni richieste per l'accesso alla posta elettronica. Se abilitato, gli utenti saranno informati tramite la finestra di dialogo oauth/authorize che la tua app può accedere al loro indirizzo email.