2012-01-02 17 views
6

Estoy usando omniauth exclusivamente para permitir el inicio de sesión en mi sitio web con facebook/google/twitter.Obtener nombre/Apellido/Correo electrónico de Twitter usando OAuth

Guardo el nombre, apellido y correo electrónico. Sin embargo, cuando elevo el hash de auth de twitter de oauth solo obtengo el apodo, el nombre, la ubicación, la imagen, la descripción y las URL en el hash de autenticación.

¿Hay un alcance que pueda pasar en mi inicializador para obtener el correo electrónico del usuario y dividir el nombre en los campos first_name, last_name?

Respuesta

8

Twitter no da mensajes de correo electrónico de los usuarios por lo que no será capaz de conseguir que la información de la API de Twitter. En su lugar, debe pedirle al usuario que escriba su dirección de correo electrónico en su formulario de registro.

En cuanto a la división del nombre de hasta, que haría que una vez que haya regresado el hash usando algo como:

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}" 

Hemos de tener en cuenta que podría ser last_namenil si no tienen una espacio en su nombre o no dieron un apellido. Esto tampoco considera el hecho de que muchas personas tienen múltiples apellidos en otras culturas.

+0

Muchas gracias. No estoy seguro de cómo manejar la solicitud de la dirección de correo electrónico después de la devolución de llamada: soy bastante nuevo en los rieles y en este momento solo tengo que crear una acción para manejar esto de una sola vez sin la intervención del usuario. Probablemente otra pregunta para SO. – Rapture

+0

Desafortunadamente, Twitter le obliga a utilizar un paso adicional en su proceso de registro al no proporcionar la dirección de correo electrónico. Tendría que redirigir al usuario a un formulario de registro preguntándole su dirección de correo electrónico o bien utilizar un servicio de registro diferente, como Facebook, que proporciona la dirección de correo electrónico si desea que sea transparente. – iwasrobbed

+0

Sí, actualmente estoy usando Facebook y Google, probablemente terminaré abandonando Twitter debido a esto. – Rapture

0

Si tiene integración con FB, Google y Twitter, necesitará tener una primera y última en su base de datos (si su interfaz de usuario lo requiere> mi caso). Esto es lo que ocurrió con que algunos países presentan las personas con más de 2 fichas por sus nombres por ejemplo: (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 te da todos los nombres combinado en una cadena Pero, algunas personas tienen nombres de más de dos palabras, como "John Clark Smith". Usted puede elegir para tratar los de tres maneras diferentes:

(1) nombre apellido: "Juan", apellidos: "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) nombre apellido: "John Clark", apellidos: "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) nombre apellido: "Juan", apellidos: "Clark Smith"

def first_name 
    name.split.first 
    end 

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

los ejemplos anteriores asumen que si el nombre contiene menos de 2 palabras, entonces es un primer nombre. Esta pregunta es similar a this one

0

para uso php:

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

Tenga en cuenta el nombre podría tener múltiples apellidos y posiblemente múltiples firstnames, este se ocupa de múltiples apellidos, pero no firstnames.

2

Usando la API actual de Twitter es posible recibiendo el correo electrónico. Debe completar un formulario solicitando ese permiso.El proceso es fácil y rápido, se explica here.

Solicitar la dirección de correo electrónico de un usuario requiere que su aplicación sea incluida en la lista blanca de Twitter. Para solicitar acceso, use este formulario.

Una vez incluida en la lista blanca, la casilla de verificación "Solicitar direcciones de correo electrónico de los usuarios" estará disponible bajo los permisos de su aplicación en apps.twitter.com. Política de privacidad Los campos de URL y Términos de servicio también estarán disponibles en la configuración que se requiere para el acceso al correo electrónico. Si está habilitado, se informará a los usuarios mediante el cuadro de diálogo oauth/authorize que su aplicación puede acceder a su dirección de correo electrónico.

Cuestiones relacionadas