freeCodeCamp/curriculum/challenges/spanish/06-information-security-and.../advanced-node-and-express/implementation-of-social-au...

3.4 KiB

id title challengeType videoUrl localeTitle
589a8eb3f9fc0f352b528e72 Implementation of Social Authentication III 2 Implementación de la autenticación social III

Description

Como recordatorio, este proyecto se está construyendo sobre el siguiente proyecto de inicio en Glitch , o clonado desde GitHub . La parte final de la estrategia es manejar el perfil devuelto por Github. Necesitamos cargar el objeto de la base de datos de usuarios, si existe, o crear uno si no existe, y rellenar los campos del perfil, luego devolver el objeto del usuario. Github nos proporciona un ID único dentro de cada perfil que podemos usar para buscar con el usuario serializado (ya implementado). A continuación se muestra un ejemplo de implementación que puede usar en su proyecto: va dentro de la función que es el segundo argumento para la nueva estrategia, justo debajo de console.log(profile); actualmente es:
 db.collection ('socialusers'). findAndModify (
    {id: profile.id},
    {},
    {$ setOnInsert: {
        ID: profile.id,
        nombre: profile.displayName || 'John Doe',
        foto: profile.photos [0] .value || ",
        correo electrónico: profile.emails [0] .value || 'No hay correo electrónico público',
        created_on: new Date (),
        Proveedor: profile.provider || "
    }, $ set: {
        last_login: new Date ()
    }, $ inc: {
        login_count: 1
    }},
    {upsert: true, new: true},
    (err, doc) => {
        devuelve cb (null, doc.value);
    }
); 
Con un findAndModify, le permite buscar un objeto y actualizarlo, así como subir el objeto si no existe y recibir el nuevo objeto cada vez en nuestra función de devolución de llamada. En este ejemplo, siempre establecemos el last_login como ahora, siempre incrementamos el login_count en 1, y solo cuando insertamos un nuevo objeto (nuevo usuario) llenamos la mayoría de los campos. Algo para notar también es el uso de valores por defecto. A veces, un perfil devuelto no tendrá toda la información completada o el usuario la habrá elegido para que permanezca privada; Así que en este caso tenemos que manejarlo para evitar un error. Debería poder iniciar sesión en su aplicación ahora, ¡pruébelo! Envía tu página cuando creas que lo has hecho bien. Si te encuentras con errores, puedes ver un ejemplo del código terminado de este mini-proyecto aquí .

Instructions

Tests

tests:
  - text: Configuración de la estrategia de Github completa
    testString: 'getUserInput => $.get(getUserInput("url")+ "/_api/server.js") .then(data => { assert.match(data, /GitHubStrategy[^]*db.collection/gi, "Strategy should use now use the database to search for the user"); assert.match(data, /GitHubStrategy[^]*socialusers/gi, "Strategy should use "socialusers" as db collection"); assert.match(data, /GitHubStrategy[^]*return cb/gi, "Strategy should return the callback function "cb""); }, xhr => { throw new Error(xhr.statusText); })'

Challenge Seed

Solution

// solution required