Introducci贸n a JavaScript

1

驴Por qu茅 aprender JavaScript?

2

隆Hola Mundo! en Mac

3

隆Hola Mundo! en Windows

4

Anatom铆a de una variable

5

Tipos de datos en JavaScript

6

Creaci贸n de strings

7

Operadores aritm茅ticos

8

Conversi贸n de tipos: Type Casting y Coerci贸n

9

Conversi贸n de tipos expl铆cita e impl铆cita

Estructuras de Control y L贸gica

10

Operadores de comparaci贸n

11

Operadores l贸gicos

12

Ejecuci贸n condicional: if

13

Ejercicio: Adivina el n煤mero

14

Ejecuci贸n condicional: switch

15

Loop: for

16

Loop: for of

17

Loop: for in

18

Loop: while

19

Loop: do while

Funciones y This

20

Anatom铆a de una funci贸n

21

Funciones vs M茅todos

22

Funciones puras e impuras

23

Arrow function y enlace l茅xico

24

Contextos de ejecuci贸n y scope chain

25

驴Qu茅 es Closure?

26

Preguntas a Desarrolladores Senior: 驴Por qu茅 aprender Desarrollo Web?

Manipulaci贸n de Arrays

27

Introducci贸n a Arrays

28

Mutabilidad e inmutabilidad de Arrays

29

Modificaci贸n b谩sica del final con push( ), pop( )

30

Iteraci贸n con map( ) y forEach( )

31

Filtrado y reducci贸n con filter( ) y reduce( )

32

B煤squeda de elementos con find( ) y findIndex( )

33

Crear copias con slice( )

34

Spread operator: casos de uso

Programaci贸n Orientada a Objetos

35

Anatom铆a de un Objeto

36

Trabajando con objetos en JavaScript

37

Funci贸n constructora

38

驴Qu茅 es una clase?

39

Prototipos y herencias

40

Herencia en la pr谩ctica

41

Prototipos en la pr谩ctica

42

this en JavaScript

43

Proyecto: Crea una red social

44

Proyecto: Crea una red social parte 2

Asincron铆a en JavaScript

45

驴C贸mo funciona el JavaScript Engine?

46

Promesas en JavaScript

47

Usando Async y await en JavaScript

48

For await of

49

驴C贸mo funciona la web?

50

驴C贸mo funciona HTTP?

51

M茅todo GET en JavaScript

52

M茅todo POST en JavaScript

53

M茅todo DELETE en JavaScript

54

Importancia del id en el m茅todo DELETE

55

ECMAScript 6 y tus siguientes pasos

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Proyecto: Crea una red social parte 2

44/55
Recursos

驴C贸mo implementar un sistema de autenticaci贸n efectivo en JavaScript?

Crear un sistema de autenticaci贸n seguro y confiable es crucial en cualquier aplicaci贸n. La autenticaci贸n asegura que solo los usuarios autorizados puedan acceder a ciertos recursos o datos. En este contexto, vamos a explorar c贸mo implementar una funci贸n de autenticaci贸n de "sign-in" en JavaScript que valide las credenciales del usuario, mostrando un mensaje de bienvenida si son correctas, o un mensaje de error si no lo son.

驴C贸mo asegurarse de que las credenciales del usuario sean v谩lidas?

Primero, necesitamos implementar una funci贸n que verifique si las credenciales proporcionadas por el usuario coinciden con alguna cuenta v谩lida. Esta funci贸n debe devolver true si encuentra coincidencias y false si no lo hace. A continuaci贸n, se muestra c贸mo podr铆a estructurarse este proceso en JavaScript:

function validateUser(username, password) {
    const users = [
        { username: "user1", password: "123" },
        { username: "caro", password: "456" },
        { username: "andres", password: "789" }
    ];

    for (let user of users) {
        if (user.username === username && user.password === password) {
            return true;
        }
    }
    return false;
}

驴C贸mo crear la funci贸n de "sign-in"?

Con una funci贸n de validaci贸n en su lugar, podemos avanzar hacia la funci贸n signIn que maneja el proceso de autenticaci贸n completo. Esta funci贸n llamar谩 a validateUser y dependiendo del resultado, mostrar谩 un mensaje de bienvenida o de error.

function signIn(username, password) {
    if (validateUser(username, password)) {
        alert(`Bienvenido a tu cuenta, ${username}`);
        console.log("Este es tu timeline");
    } else {
        alert("Ups, usuario o contrase帽a incorrectos");
    }
}

驴C贸mo mejorar la experiencia del usuario en el proceso de autenticaci贸n?

Una buena experiencia de usuario es vital en cualquier flujo de autenticaci贸n. Aqu铆 hay algunas recomendaciones para mejorar este proceso:

  • Mensajes Personalizados: Personalizar los mensajes de bienvenida con el nombre del usuario mejora la experiencia haci茅ndola m谩s amigable.
  • Manejo de Errores: Informar claramente cuando las credenciales son incorrectas, sin dejar al usuario adivinando, es esencial.
  • Validaci贸n Eficiente: Asegurarse de que el ciclo de validaci贸n (for loop) verifique todas las credenciales antes de decidir si son incorrectas.

驴Qu茅 estrategias se pueden aplicar para evitar errores comunes?

A veces, los errores en la implementaci贸n de un sistema de autenticaci贸n pueden causar que las credenciales correctas no sean reconocidas. Algunos pasos a seguir para evitar estos errores incluyen:

  1. Revisar la l贸gica de control de flujo: Aseg煤rate de que el bucle de validaci贸n no se interrumpa prematuramente.
  2. Probar diferentes escenarios: Siempre prueba el c贸digo con diferentes usuarios y contrase帽as antes de implementarlo en un entorno real.
  3. Separar la l贸gica de alertas y validaciones: Mantener claramente separada la l贸gica de validaci贸n y las notificaciones de usuario hace el c贸digo m谩s limpio y m谩s f谩cil de mantener.

Con estos conceptos bien claros, estar谩s bien encaminado para implementar sistemas de autenticaci贸n efectivos y seguros. 隆Recuerda practicar mucho para mejorar constantemente tus habilidades como desarrollador!

Aportes 41

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

Tambi茅n se puede optar por utilizar el m茅todo` find()`, es mucho m谩s sencillo...
Hola, a continuaci贸n comparto mi soluci贸n, aplique algunos conceptos "nuevos" como lo son la destructuraci贸n de objetos y arrays para tener un mejor control de cada iteraci贸n en el for loop y al final un short circuiting, espero sea de ayuda y cualquier inquietud estar茅 atento a resolverla. ![](https://static.platzi.com/media/user_upload/image-13b123e2-953e-460e-8b7d-68d46406960b.jpg)
a mi me quedo asi, ya lo hice tipo web, muy basica pero funciona `class User {聽 聽 constructor (name, password) {聽 聽 聽 聽 this.name = name;聽 聽 聽 聽 this.password = password;聽 聽 }}` `class timeLine extends User {聽 聽 constructor (name, textArea) {聽 聽 聽 聽 super(name);聽 聽 聽 聽 this.textArea = textArea聽 聽 聽 聽 }}` `function login () {聽 聽 const username = usernameInput.value;聽 聽 const password = passwordInput.value;聽 聽 for (let i = 0; i < users.length; i++) {聽 聽 聽 聽 if (users[i].name === username && users[i].password === password) {聽 聽 聽 聽 聽 聽 sessionStorage.setItem("username", username)聽 聽 聽 聽 聽 聽 window.location.replace("welcome.html");聽 聽 聽 聽 聽 聽 return;聽 聽 聽 聽 }聽 聽 聽 聽 else if (users[i].name !== username || users[i.password !== password]) {聽 聽 聽 聽 聽 聽 const wrongUserPass = document.createElement("div");聽 聽 聽 聽 聽 聽 wrongUserPass.textContent = "Wrong Username or Password";聽 聽 聽 聽 聽 聽 form.appendChild(wrongUserPass);聽 聽 聽 聽 }聽 聽 }}` `function signin () {聽 聽 const username = newUsername.value;聽 聽 const password = newPassword.value;聽 聽 const repassword = newRePassword.value;聽 聽 const error = document.createElement("div");` `聽 聽 for (let i = 0; i < users.length; i++) {聽 聽 聽 聽 聽 聽 聽 聽 if (users[i].name === username) {聽 聽 聽 聽 聽 聽 error.textContent = "Choose another user name";聽 聽 聽 聽 聽 聽 siginForm.appendChild(error);聽 聽 聽 聽 聽 聽 break;聽 聽 聽 聽 } else if (password !== repassword ) {聽 聽 聽 聽 聽 聽 error.textContent = "Password has to match";聽 聽 聽 聽 聽 聽 siginForm.appendChild(error);聽 聽 聽 聽 聽 聽 break; 聽 聽 聽 聽 聽 } else {聽 聽 聽 聽 聽 聽 const newUser = new User(username, password);聽 聽 聽 聽 聽 聽 users.push(newUser);聽 聽 聽 聽 聽 聽 newUsername.value = "";聽 聽 聽 聽 聽 聽 newPassword.value = "";聽 聽 聽 聽 聽 聽 newRePassword.value = "";聽 聽 聽 聽 聽 聽 error.textContent = "User created, go to log in";聽 聽 聽 聽 聽 聽 siginForm.appendChild(error)聽 聽 聽 聽 聽 聽 break;聽 聽 聽 聽 }聽 聽 }聽 聽 console.log(users)}` `function postTweet () {聽 聽const tweetText = tweet.value;聽 聽const newTweet = new timeLine(helloUser, tweetText);聽 聽userTimeLine.push(newTweet);聽 聽tweet.value = ""聽 聽renderTweets()聽 聽 console.log(userTimeLine)}` `function renderTweets () {聽 聽 tweetsContainer.innerHTML = "";聽 聽 for (i = 0; i < userTimeLine.length; i++) {聽 聽 聽 聽 const newTweetContainer = document.createElement("div");聽 聽 聽 聽 const tweetAuthor = document.createElement("h4");聽 聽 聽 聽 const tweetContent = document.createElement("p");聽 聽 聽 聽 聽 聽 tweetAuthor.textContent = userTimeLine[i].name聽 聽 聽 聽 newTweetContainer.appendChild(tweetAuthor);聽 聽 聽 聽 聽 聽 tweetContent.textContent = userTimeLine[i].textArea聽 聽 聽 聽 newTweetContainer.appendChild(tweetContent);聽 聽 聽 聽 tweetsContainer.appendChild(newTweetContainer);聽 聽 聽 聽 聽 聽 }}` `const form = document.querySelector("form");const usernameInput = document.querySelector("#username");const passwordInput = document.querySelector("#password");const loginButton = document.querySelector(".login-button");` `const siginForm = document.querySelector(".sigin-form");const newUsername = document.querySelector("#new-username");const newPassword = document.querySelector("#new-password");const newRePassword = document.querySelector("#new-repassword");const signinButton = document.querySelector(".signin-button");` `let users = [];let userTimeLine = [{name: "Antonio", textArea: "Como"}];` `users.push(new User("juan", "hola"));` `if (loginButton) {聽 聽 loginButton.addEventListener("click", (event) => {聽 聽 聽 聽 event.preventDefault();聽 聽 聽 聽 login(username, password);聽 聽 });}` `if (signinButton) {聽 聽 signinButton.addEventListener("click", (event) => {聽 聽 聽 聽 event.preventDefault();聽 聽 聽 聽 signin();聽 聽 });` `}` `` const helloUser = sessionStorage.getItem("username");const welcomeTitleContainer = document.querySelector(".welcome-content");welcomeTitle = document.createElement("h1");welcomeTitleContainer.appendChild(welcomeTitle)welcomeTitle.textContent = `Welcome back! ${helloUser}` `` `const tweet = document.querySelector("#tweet");const postTweetButton = document.querySelector(".post-tweet")const tweetsContainer = document.querySelector(".tweets-container");` `renderTweets()` `if (postTweetButton) {聽 聽 postTweetButton.addEventListener("click", (event) => {聽 聽 聽 聽 event.preventDefault();聽 聽 聽 聽 postTweet();聽 聽 });` `}` y ac谩 los HTML 1. `<html lang="en"><head>聽 聽 <meta charset="UTF-8">聽 聽 <meta name="viewport" content="width=device-width, initial-scale=1.0">聽 聽 <title>Social media</title>聽 聽 <script src="./index.js" defer></script></head><body>聽 聽 <form action="">聽 聽 聽 聽 <label for="username">Username</label>聽 聽 聽 聽 <input type="text" id="username" name="username">聽 聽 聽 聽 <label for="password">Password</label>聽 聽 聽 聽 <input type="password" id="password" name="password">聽 聽 聽 聽 <button type="button" class="login-button">Login</button>聽 聽 聽 聽 <button>Sigin</button>聽 聽 </form></body></html>` 2. `<html lang="en"><head>聽 聽 <meta charset="UTF-8">聽 聽 <meta name="viewport" content="width=device-width, initial-scale=1.0">聽 聽 <title>Document</title>聽 聽 <script src="./index.js" defer></script></head><body>聽 聽
聽 聽
聽 聽
聽 聽 聽 聽

What are you thinking?

聽 聽 聽 聽 <textarea name="tweet" id="tweet"></textarea>聽 聽 聽 聽 <button class="post-tweet">Send</button>聽 聽
聽 聽
聽 聽 聽 聽 聽 聽
</body></html>` 3. `<html lang="en"><head>聽 聽 <meta charset="UTF-8">聽 聽 <meta name="viewport" content="width=device-width, initial-scale=1.0">聽 聽 <title>Document</title>聽 聽 <script src="./index.js" defer></script></head><body>聽 聽 <form action="" class="sigin-form">聽 聽 <label for="username">Username</label>聽 聽 <input type="text" id="new-username" name="new-username">聽 聽 <label for="password">Password</label>聽 聽 <input type="password" id="new-password" name="new-password">聽 聽 <label for="re-password">Re-Password</label>聽 聽 <input type="password" id="new-repassword" name="new-repassword">聽 聽 <button type="button" class="signin-button">Signin</button></form></body></html>`
Este proyecto me gusto mucho. Juntar el html, el css y el javascript. Fue muy bueno y retante.
![](https://static.platzi.com/media/user_upload/redsocial-d7186c25-6e97-4b43-b204-ac520330aaca.jpg)![](https://static.platzi.com/media/user_upload/redsocial-9e72e709-b121-4d6e-afc5-c4b4fc6eb520.jpg)
Esta es mi soluci贸n con find() ![](https://static.platzi.com/media/user_upload/RETO_%20RED%20SOCIAL-6f86152f-0f88-4c62-8514-2dc588e6b0fc.jpg)
No se que se pretende con este ejercicio? Resu茅lvalo como pueda, resu茅lvalo con lo visto en clase o qui茅brese el coco. No me parece que sea un ejercicio para fundamentos de JS.
Hola! Les comparto mi soluci贸n al reto. ![](https://static.platzi.com/media/user_upload/Code-3059d03e-5b12-423d-9dd3-62e668f7a822.jpg)
Aqui mi solucion utilize el doom para que sea mas dinamico en la web: html: ```html <style type="text/css"> body { font-family: Arial, Helvetica, sans-serif; } </style>

Social Media Project

<h5 id="username">username: @</h6> <fieldset> <legend>Timeline:</legend>

</fieldset> <script src="project-social-media.js"></script> ```js: ```js const usernameField = document.getElementById('username'), timelineField = document.getElementById('timeline'); // DB const userDatabase = [ { username: "tolvards", password: "password" }, { username: "freddier", password: "password"}, { username: "kyb3rcipher", password: "password" } ]; const usersTimeline = [ { username: "tolvards", timeline: "Linux" }, { username: "freddier", timeline: "Platzi" }, { username: "kyb3rcipher", timeline: "STAR" } ]; // Input credentials const username = prompt("Username:"); const password = prompt("Password:"); // Find user in db const user = userDatabase.findIndex(user => username === user.username && password === user.password); // Return -1 if is not found if (user !== -1) { alert("Logged!"); // Add username text in page usernameField.innerText += username; for (timeline of usersTimeline) { if (timeline.username === username) { // Add user timeline in page timelineField.innerText = timeline.timeline; } } } else { alert("Incorrect credentials."); } ```Use el method find() visto en classes anteriores pero si quisieramos usar un **for** podriamos hacerlo con: ```js for (let user of userDatabase) { if (username === user.username && password === user.password) { alert("Logged!"); // Add username text in page usernameField.innerText += username; for (timeline of usersTimeline) { if (timeline.username === username) { // Add user timeline in page timelineField.innerText = timeline.timeline; break; // Exit of loop when user timeline is found. } } break; } } ```
con esto ya tengo unas base solo queda las practicas
const username = prompt("Cu谩l es tu usuario? "); const password = prompt("Cu谩l es tu contrase帽a? "); function timeline () { console.log(usersTimeline) } function validacion (user, pass) { for (i = 0; i < usersDatabase.length; i++) { if (user === usersDatabase\[i].username && pass === usersDatabase\[i].password) { return true } } return false } validacion(username, password) function validacionFinal () { if (validacion(username, password)) { console.log("Bienvenido") timeline() } else { console.log("Usuario o contrase帽a inv谩lidos") } } validacionFinal ()
```js / mi soluci贸n (debes usar html) const usersDatabase = [ { username: "andres", password: "123", }, { username: "caro", password: "456", }, { username: "mariana", password: "789", }, ]; const usersTimeline = [ { username: "Estefany", timeline: "Me encata Javascript!", }, { username: "Oscar", timeline: "Bebeloper es lo mejor!", }, { username: "Mariana", timeline: "A mi me gusta m谩s el caf茅 que el t茅", }, { username: "Andres", timeline: "Yo hoy no quiero trabajar", }, ]; const usuario = document.getElementById('usuario') const contrase帽a = document.getElementById('contrase帽a') const boton = document.getElementById('boton') const respuesta = document.getElementById('respuesta') boton.addEventListener('click', usuarioExiste) function usuarioExiste() { const usuarioIngresado = usuario.value const contrase帽aIngresada = contrase帽a.value const comprobaciondeusuario = usersDatabase.find(usuario => usuario.username === usuarioIngresado && usuario.password === contrase帽aIngresada) if (comprobaciondeusuario) { const comprobaciondemensaje = usersTimeline.find(usuario => usuario.username.toLowerCase() === comprobaciondeusuario.username.toLowerCase()) if (comprobaciondemensaje) { respuesta.innerHTML = comprobaciondemensaje.timeline } else { respuesta.innerHTML = 'no hay mensajes publicados' } } else { respuesta.innerHTML = ' usuario y/o contrase帽a incorreta' } } ```/ mi soluci贸n (debes usar html)
// Programa implementaci贸n const username = prompt("Ingrese su usuario"); const password = prompt("Ingrese su contrase帽a"); function usuarioExistente(username, password) { for (let i = 0; i < usersDatabase.length; i++) { console.log(`Comparando ${usersDatabase\[i].username} con ${username} y ${usersDatabase\[i].password} con ${password}`); if ( usersDatabase\[i].username === username && usersDatabase\[i].password === password ) { return true; } } return false; } usuarioExistente(username, password); function signIn(username, password) { if (usuarioExistente(username, password)) { alert(`Bienvenido ${username}!`); console.log(usersTimeline); } else { alert("Usuario o contrase帽a incorrectos"); } } signIn(username, password);
Hola, aqu铆 la forma en la que yo lo hice: ```js class User { constructor(username, password) { this.username = username.toLowerCase(); this.password = password; } validatePassword(password){ return this.password === password; } } class Timeline{ constructor(username, timeline) { this.username = username; this.timeline = timeline; } } const usersDatabase = [ new User('andres', '123'), new User('caro', '456'), new User('mariana', '789') ]; const usersTimeline = [ new Timeline('Estefany', 'Me encanta Javascript!'), new Timeline('Oscar', 'Bebeloper es lo mejor!'), new Timeline('Mariana', 'A mi me gusta m谩s el caf茅 que el t茅'), new Timeline('Andres', 'Yo hoy no quiero trabajar'), ]; function init() { let userName = prompt('Ingresa un usuario'); let password = prompt('Ingresa una contrase帽a'); let userFound = usersDatabase.find(u => u.username === userName.toLowerCase()); if(userFound) { let hasAccess = userFound.validatePassword(password); if(hasAccess) { let userTimeline = usersTimeline.filter(t => t.username.toLowerCase() === userFound.username); userTimeline.forEach(element => { console.log(element); }); } else { alert('Contrase帽a incorrecta'); } } else { alert('Usuario inexistente'); } } ```class User {聽 聽 constructor(*username*, *password*)聽 聽 {聽 聽 聽 聽 this.username = *username*.toLowerCase();聽 聽 聽 聽 this.password = *password*;聽 聽 } 聽 聽 validatePassword(*password*){聽 聽 聽 聽 return this.password === *password*;聽 聽 }} class Timeline{聽 聽 constructor(*username*, *timeline*)聽 聽 {聽 聽 聽 聽 this.username = *username*;聽 聽 聽 聽 this.timeline = *timeline*;聽 聽 }} const usersDatabase = \[聽 聽 new User('andres', '123'),聽 聽 new User('caro', '456'),聽 聽 new User('mariana', '789')]; const usersTimeline = \[聽 聽 new Timeline('Estefany', 'Me encanta Javascript!'),聽 聽 new Timeline('Oscar', 'Bebeloper es lo mejor!'),聽 聽 new Timeline('Mariana', 'A mi me gusta m谩s el caf茅 que el t茅'),聽 聽 new Timeline('Andres', 'Yo hoy no quiero trabajar'),]; function init(){聽 聽 let userName = prompt('Ingresa un usuario');聽 聽 let password = prompt('Ingresa una contrase帽a'); 聽 聽 let userFound = usersDatabase.find(*u* => *u*.username === userName.toLowerCase());聽 聽 if(userFound)聽 聽 {聽 聽 聽 聽 let hasAccess = userFound.validatePassword(password);聽 聽 聽 聽 if(hasAccess)聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 let userTimeline = usersTimeline.filter(*t* => *t*.username.toLowerCase() === userFound.username);聽 聽 聽 聽 聽 聽 userTimeline.forEach(*element* => {聽 聽 聽 聽 聽 聽 聽 聽 console.log(*element*);聽 聽 聽 聽 聽 聽 });聽 聽 聽 聽 }聽 聽 聽 聽 else聽 聽 聽 聽 {聽 聽 聽 聽 聽 聽 alert('Contrase帽a incorrecta');聽 聽 聽 聽 }聽 聽 }聽 聽 else聽 聽 {聽 聽 聽 聽 alert('Usuario inexistente');聽 聽 }}
Hola, dejar茅 por aqu铆 mi c贸digo sin los arreglos que nos dieron como "Bases de datos" Recibo cualquier apreciaci贸n que vean necesaria... ```js const username = prompt("Ingresa tu Usuario:"); const password = prompt("Ingresa tu Contrase帽a:"); function userExist() { for (let i = 0; i < usersDatabase.length; i++) { let user = usersDatabase[i]; if (user.username === username && user.password === password) { return showMessage(user.username); } } console.log(user.username); alert("No eres usuario"); } function showMessage(user) { const userCapitalized = user.charAt(0).toUpperCase() + user.slice(1); const indexUser = usersTimeline.findIndex( (user) => user.username === userCapitalized ); if (indexUser >= 0 && indexUser <= usersTimeline.length) { const thisUser = usersTimeline[indexUser]; alert( `Bienvenido ${thisUser.username}, tu timeline es "${thisUser.timeline}"` ); } else { alert(`Hola ${userCapitalized}, a煤n no has agregado tu timeline`); } } userExist(); ```Gracias, fue una excelente experiencia...
ummmmm este profesor tiende a enredarse demasiado, ya soy programador pero pienso en alguien que no sepa nada y tal vez termine muy perdido en clases como estas
Comparto el c贸digo del reto con algunas mejoras aplicando css. ![](https://static.platzi.com/media/user_upload/image-cfaa9739-85ff-4db5-9653-9c7971290a61.jpg)
Mi soluci贸n... ![](https://static.platzi.com/media/user_upload/image-5ad80905-0e3f-45e5-b437-12e436edd74c.jpg)
Les dejo mi codigo usando arrow functions y usando el metodo find ```js const usersDatabase=[ { username:"andres", password:"123" }, { username:"caro", password:"456" }, { username:"mariana", password:"789" } ]; const usersTimeline=[ { username:"Estefany", timeline:"Me encata Javascript!" }, { username:"caro", timeline:"Bebeloper es lo mejor!" }, { username:"mariana", timeline:"A mi me gusta m谩s el caf茅 que el t茅" }, { username:"andres", timeline:"Yo hoy no quiero trabajar" } ]; const user = prompt('Write your username'); const password = prompt('Write your password') const findUser = (user, password) => { return usersDatabase.find(u => u.username === user && u.password === password) } const findTimeline = (user) => { return usersTimeline.find(u => u.username === user) } const signIn = (user, password) => { if (findUser(user, password)) { const timelineFound = findTimeline(user) alert(`Welcome ${timelineFound.timeline ?? ''}`) } else { alert('Error: User not found') } } signIn(user, password) ```
Caro: "yo ya estuve en estos juegos" XD
function login() {聽 聽 const usersName = document.getElementById("name").value;聽 聽 const usersPassword = document.getElementById("password").value 聽 聽 console.log(`this is the user: ${usersName} this is the password: ${usersPassword}`) 聽 聽 let welcome = usersDatabase.filter((e) => e.username === usersName && e.password === usersPassword); 聽 聽 if(welcome.length >0){聽 聽 聽 console.log('Welcome') 聽 聽 聽 let board = usersTimeline.map((e) => `${e.username}: ${e.timeline}`);聽 聽 聽 console.log(board)聽 聽 } else {聽 聽 聽 console.log('error')聽 聽 }聽 聽 聽 聽} /*ACEPTO FEEBACKS*\*/
![](https://static.platzi.com/media/user_upload/carbon%20%281%29-428c421a-21dd-4719-9fed-2e909fa7d1e6.jpg)
![](https://static.platzi.com/media/user_upload/image-69567347-1e70-4488-b0fe-1c38817883dc.jpg) Aqu铆 dejo mi solucion al reto Utilice for of para iterar en el array de usuarios. .toLowerCase para que no hubiera problemas al momentos de comparar los nombres de los usuarios. Y por ultimas los tres if en los que esta la l贸gica de verificaci贸n, de pronto fui algo redundante ac谩 pero me funciono jeje.
Aqu铆 les comparto mi soluci贸n ```js const userName = prompt("Ingrese su usuario"); const userPassword = prompt("Ingrese su contrase帽a"); function validationUser(userName, userPassword) { for (let i in usersDatabase) { if ( usersDatabase[i].username === userName && usersDatabase[i].password === userPassword ) { return true; } } return false; } function logIn(userName, userPassword) { if (validationUser(userName, userPassword)) { document.write(`

Bienvenido ${userName}!

`); document.write(`

TimeLine:

`); for (let key in usersTimeline) { document.write( `

${usersTimeline[key].username}:
${usersTimeline[key].timeline}


` ); } } else { document.write("

Usuario o contrase帽a incorrectos

"); } } logIn(userName, userPassword); ```
As铆 quedo mi soluci贸n ```js // Base de datos de usuarios const usersDatabase = [ { username: "admin", password: "admin", }, { username: "caro", password: "456", }, { username: "user2", password: "789", }, ]; // Base de datos de timelines const usersTimeline = [ { username: "admin", timeline: "Hola, soy el admin", }, { username: "caro", timeline: "Hola, soy caro", }, { username: "user2", timeline: "Hola, soy user2", }, ]; // Funci贸n para verificar si el usuario existe y la contrase帽a es correcta function usuarioExistente(usuario, contrasena) { for (let i = 0; i < usersDatabase.length; i++) { if (usersDatabase[i].username === usuario && usersDatabase[i].password === contrasena) { return true; } } return false; } // Funci贸n para obtener el timeline de un usuario function mostrarTimelines(usuario) { for (let i = 0; i < usersTimeline.length; i++) { if (usersTimeline[i].username === usuario) { return usersTimeline[i].timeline; } } return "No se encontr贸 timeline para este usuario."; } // C贸digo principal let usuario = prompt("Ingrese su usuario"); let contrasena = prompt("Ingrese su contrase帽a"); if (usuarioExistente(usuario, contrasena)) { let mensaje = "Bienvenido " + usuario + "\nEstos son tus timelines: \n"; let timeline = mostrarTimelines(usuario); mensaje += timeline; alert(mensaje); } else { alert("Usuario o contrase帽a incorrectos"); } ```// Base de datos de usuariosconst usersDatabase = \[聽 聽 {聽 聽 聽 username: "admin",聽 聽 聽 password: "admin",聽 聽 },聽 聽 {聽 聽 聽 username: "caro",聽 聽 聽 password: "456",聽 聽 },聽 聽 {聽 聽 聽 username: "user2",聽 聽 聽 password: "789",聽 聽 },聽 ];聽 聽 // Base de datos de timelines聽 const usersTimeline = \[聽 聽 {聽 聽 聽 username: "admin",聽 聽 聽 timeline: "Hola, soy el admin",聽 聽 },聽 聽 {聽 聽 聽 username: "caro",聽 聽 聽 timeline: "Hola, soy caro",聽 聽 },聽 聽 {聽 聽 聽 username: "user2",聽 聽 聽 timeline: "Hola, soy user2",聽 聽 },聽 ];聽 聽 // Funci贸n para verificar si el usuario existe y la contrase帽a es correcta聽 function usuarioExistente*(usuario, contrasena)* {聽 聽 for (let i = 0; i < usersDatabase.length; i++) {聽 聽 聽 if (usersDatabase\[i].username === usuario && usersDatabase\[i].password === contrasena) {聽 聽 聽 聽 return true;聽 聽 聽 }聽 聽 }聽 聽 return false;聽 }聽 聽 // Funci贸n para obtener el timeline de un usuario聽 function mostrarTimelines*(usuario)* {聽 聽 for (let i = 0; i < usersTimeline.length; i++) {聽 聽 聽 if (usersTimeline\[i].username === usuario) {聽 聽 聽 聽 return usersTimeline\[i].timeline;聽 聽 聽 }聽 聽 }聽 聽 return "No se encontr贸 timeline para este usuario.";聽 }聽 聽 // C贸digo principal聽 let usuario = prompt("Ingrese su usuario");聽 let contrasena = prompt("Ingrese su contrase帽a");聽 聽 if (usuarioExistente(usuario, contrasena)) {聽 聽 let mensaje = "Bienvenido " + usuario + "\nEstos son tus timelines: \n";聽 聽 let timeline = mostrarTimelines(usuario);聽 聽 mensaje += timeline;聽 聽 alert(mensaje);聽 } else {聽 聽 alert("Usuario o contrase帽a incorrectos");聽 }
Hola compa帽er@s, he adaptado el c贸digo del profesor para que utilice una clase y una subclase, de esta manera no se repiten demasiadas veces la declaraci贸n de las propiedades username y password, esto nos ayuda para no ocupar memoria que nos ahorramos usando propiedades heredadas. . Tambi茅n utilic茅 el m茅todo find() para localizar si existe el username y password que el usuaio introduce en el prompt. Y tambi茅n utilice for of para imprimir los timelines de los otros usuarios. . Si tienes alguna duda preguntame, con gusto te apoyar茅. . C贸digo en im谩gen ![](https://static.platzi.com/media/user_upload/redSocial-4ba1449d-e261-4346-a1cd-cf94fcb88336.jpg)C贸digo para que lo puedan copiar: ```js class User { constructor (username, password) { this.username = username this.password = password } } class UserTimeline extends User { constructor (username, timeline) { super(username) this.timeline = timeline } } const user1 = new User('andres', '123') const user2 = new User('caro', '456') const user3 = new User('mariana', '789') const arrayUsersDatabase = [user1, user2, user3] const userTimeline1 = new UserTimeline('Estefany', 'Me encanta Javascript!') const userTimeline2 = new UserTimeline('Oscar', 'Bebeloper es lo mejor!') const userTimeline3 = new UserTimeline('Mariana', 'A mi me gusta m谩s el caf茅 que el t茅') const userTimeline4 = new UserTimeline('Andr茅s', 'Yo hoy no quiero trabajar') const arrayUsersTimeline = [userTimeline1, userTimeline2, userTimeline3, userTimeline4] const username = prompt('驴Cu谩l es tu usuario?') const password = prompt('驴Cu谩l es tu contrase帽a?') function singIn (username, password) { const usuarioExistente = arrayUsersDatabase.find(elemento => { // devuelve true si el user y passwrd existen en arrayUsersDatabase return elemento.username === username && elemento.password === password }) if (usuarioExistente) { //Si usuarioExistente es igual a true entonces... alert(`Bienvenido a tu cuenta ${username}`) for (let elemento of arrayUsersTimeline) { console.log(` ${elemento.username} dice: ${elemento.timeline} `); } } else { alert('Uuups, usuario y contrase帽a incorrectos'); } } singIn(username, password) ```
Hola Les comparto mi soluci贸n, me gusta el c贸digo simple as铆 que la optimice lo m谩ximo posible. Espero les guste! ![](https://static.platzi.com/media/user_upload/imagen-62614b76-e521-4963-bd77-b5da85c4d2e9.jpg)
Me parecio muy incompleta la explicacion, se supone que despues del mensaje de bienvenida a cada usuario se tendria que inprimir el timeline de cada uno y lo que se hizo fue imprimir el array "usersTimeline" completo, no hay profundidad en ese aspecto y dejan al estudiante a la deriva. Otra cosa se ve un nuevo metodo llamado "alert", que a mi parecer se debio hacer una breve explicacion de este .... Sin embargo, dejo mi solucion definitiva de este ejercicio aplicando el metodo find() que si fue visto en el contenido del curso ..... ![](https://static.platzi.com/media/user_upload/image-f94bf3b3-551d-427f-9b44-d8b074f17c69.jpg)
```js const usersDatabase = [ { username: 'admin', password: 'admin', }, { username: 'user', password: 'user', }, { username: 'guest', password: 'guest1', }, ] const userdTimeline = [ { username: 'guest', message: 'I am the guest!', }, { username: 'admin', message: 'I am the admin!', }, { username: 'user', message: 'I am the user', }, ] const login = (username, password) => { const user = usersDatabase.find(user => user.username === username && user.password === password) if (user) { console.log(`Welcome, ${user.username}!`) const timelineMessage = userdTimeline.filter(message => message.username === user.username) console.log(`Your timeline: ${timelineMessage.map(message => message.message)}`) } else { console.log('Invalid credentials') } } login('guest', 'guest1') ```
## Construcci贸n de un Algoritmo para Generar una Red Social * La tarea de hoy es construir un algoritmo para una red social. * Cuatro pasos clave son necesarios para completar este reto. ## Requerimientos del Algoritmo * El usuario debe poder ingresar su usuario y contrase帽a. * El sistema debe validar si el usuario y la contrase帽a existen en la base de datos proporcionada. * Si el usuario y la contrase帽a son correctos, el sistema debe mostrar un mensaje de bienvenida y el timeline del usuario. * Si el usuario y la contrase帽a son incorrectos, el sistema debe mostrar un mensaje de error y no debe mostrar ning煤n timeline. ## Validaci贸n de Usuario y Contrase帽a * Se debe construir una funci贸n que reciba el usuario y la contrase帽a ingresados. * La funci贸n debe validar estos datos contra una base de datos existente. * Si la validaci贸n es correcta, la funci贸n debe retornar `true`; de lo contrario, debe retornar `false`. ## Implementaci贸n del Sign-In * Crear una funci贸n de sign-in que reciba los datos ingresados por el usuario. * La funci贸n debe utilizar la funci贸n de validaci贸n para comprobar los datos. * Si los datos son correctos, se muestra un mensaje de bienvenida con el nombre del usuario y su timeline. * Si los datos son incorrectos, se muestra un mensaje de error indicando que el usuario o la contrase帽a son incorrectos. ## Ejemplo de C贸digo function validarUsuario(username, password) { for (let i = 0; i < userDatabase.length; i++) { if (userDatabase\[i].username === username && userDatabase\[i].password === password) { return true; } } return false; } function signIn(username, password) { if (validarUsuario(username, password)) { alert(`Bienvenido a tu cuenta, ${username}`); console.log(userTimeline); } else { alert("Ups, usuario o contrase帽a incorrectos"); } } // Ejemplo de uso: const username = prompt("驴Cu谩l es tu usuario?"); const password = prompt("驴Cu谩l es tu contrase帽a?"); signIn(username, password); ## Pr贸ximos pasos * Completar el reto de construir la red social siguiendo los requerimientos dados. * Personalizar y expandir el timeline para hacerlo m谩s din谩mico. * Practicar y mejorar el c贸digo para perfeccionar las habilidades de desarrollo. * Subir el proyecto final y presentar el examen correspondiente.
Mi c贸digo class validador { constructor () { // Solicitar nombre al usuario this.nombre = prompt("Ingrese su nombre:"); // Solicitar contrase帽a al usuario this.password = prompt("Ingrese su contrase帽a:"); } validar(){ const usuarios={ usuario1:{ nombre:"Julio", password:"loro" }, usuario2:{ nombre:"Alberto", password:"perro" }, usuario3:{ nombre:"Lia", password:"gato" } } let usuarioValido= false for (key in usuarios){ if (usuarios\[key].nombre===this.nombre && usuarios\[key].password===this.password){ usuarioValido=true break } } if (usuarioValido==false){ alert('Contrase帽a o Nombre Inv谩lido') } else alert('Ingreso v谩lido') }} const juan= new validadorjuan.validar()
Mi soluciuon con lo aprendido en este curso, Arrow Function, Busqueda de elementos, operador ternario y dem谩s. Lo cual reduce bastante el c贸digo escrito y lo hace m谩s legible. ```js /* Reto 1.- El usuario debe poder ingresar con user y pass 2.- El sistema debe validar si el user y pass ingresados por el user existen en la base de datos 3.- Si el user y el pass con correctos, el sistema debe mostrar un mensaje de welcome and show the timeline of user 4.- If the user and pass is incorrect, the sistem must show a messaje of error and no show anything timeline */ const usersDB = [ { username: "Andres", password: "123", }, { username: "Caro", password: "456", }, { username: "Maria", password: "789", } ] const userTimeLine = [ { username: "Estefany", timeLine: "I love JS" }, { username: "Oscar", timeLine: "Developer is the best" }, { username:"Mariana", timeLine: "I like coffe more than tea" }, { username: "Andres", timeLine: "I don't want to work " } ] const userInput = prompt("Input tu user").trim() const passInput = prompt("Ingresa tu pass").trim() usersDB.find(user => user.username === userInput && user.password === passInput) ? welcome(userInput) : console.log("User or Pass Incorrect") function welcome(name) { console.log(`Welcome ${name}`) userTimeLine.forEach(uTL => console.log(uTL.username, " // ", uTL.timeLine)) } ```
const userExists = prompt("Enter your username: ");const password = prompt("Enter your Password: "); function existingUser(userExists, password){聽 聽 for(user in usersDatabase){聽 聽 聽 聽 if(userExists === usersDatabase\[user].username && password === usersDatabase\[user].password){聽 聽 聽 聽 聽 聽 return true;聽 聽 聽 聽 }else{ return false;}聽 聽 }} function SignIn(userExists, password){聽 聽 for(user in usersDatabase){聽 聽 聽 聽 for(time in usersTimeline){聽 聽 聽 聽 聽 聽 if(existingUser(userExists, password)){聽 聽 聽 聽 聽 聽 聽 聽 if(userExists === usersTimeline\[time].username){聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 return console.log(`Welcome ${userExists}\n ${usersTimeline\[time].timeline}`);聽 聽 聽 聽 聽 聽 聽 聽 }聽 聽 聽 聽 聽 聽 } else{console.log('User not found');}聽 聽 聽 聽 }聽 聽 }} 聽 聽 const usersDatabase = \[聽 聽 {聽 聽 聽 聽 username:"Andres",聽 聽 聽 聽 password:"123",聽 聽 },聽 聽 {聽 聽 聽 聽 username:"caro",聽 聽 聽 聽 password:"456",聽 聽 },聽 聽 {聽 聽 聽 聽 username:"mariana",聽 聽 聽 聽 password:"789",聽 聽 },]; const usersTimeline = \[聽 聽 {聽 聽 聽 聽 username:"Estefany",聽 聽 聽 聽 timeline:"Me encata Javascript!",聽 聽 },聽 聽 {聽 聽 聽 聽 username:"Oscar",聽 聽 聽 聽 timeline:"Bebeloper es lo mejor!",聽 聽 },聽 聽 {聽 聽 聽 聽 username:"Mariana",聽 聽 聽 聽 timeline:"A mi me gusta m脙隆s el caf脙漏 que el t脙漏",聽 聽 },聽 聽 {聽 聽 聽 聽 username:"Andres",聽 聽 聽 聽 timeline:"Yo hoy no quiero trabajar",聽 聽 },]; existingUser(userExists, password);SignIn(userExists, password); ```js const userExists = prompt("Enter your username: "); const password = prompt("Enter your Password: "); function existingUser(userExists, password){ for(user in usersDatabase){ if(userExists === usersDatabase[user].username && password === usersDatabase[user].password){ return true; }else{ return false;} } } function SignIn(userExists, password){ for(user in usersDatabase){ for(time in usersTimeline){ if(existingUser(userExists, password)){ if(userExists === usersTimeline[time].username){ return console.log(`Welcome ${userExists}\n ${usersTimeline[time].timeline}`); } } else{console.log('User not found');} } } } const usersDatabase = [ { username:"Andres", password:"123", }, { username:"caro", password:"456", }, { username:"mariana", password:"789", }, ]; const usersTimeline = [ { username:"Estefany", timeline:"Me encata Javascript!", }, { username:"Oscar", timeline:"Bebeloper es lo mejor!", }, { username:"Mariana", timeline:"A mi me gusta m脙隆s el caf脙漏 que el t脙漏", }, { username:"Andres", timeline:"Yo hoy no quiero trabajar", }, ]; existingUser(userExists, password); SignIn(userExists, password); ```
Dejo mi aporte y la forma en como lo resolviconst usersDatabase = \[聽 聽 {聽 聽 聽 聽 username: "andres",聽 聽 聽 聽 password: "123",聽 聽 },聽 聽 {聽 聽 聽 聽 username: "caro",聽 聽 聽 聽 password: "456",聽 聽 },聽 聽 {聽 聽 聽 聽 username: "mariana",聽 聽 聽 聽 password: "789",聽 聽 },]; const usersTimeline = \[聽 聽 {聽 聽 聽 聽 username: "Estefany",聽 聽 聽 聽 timeline: "Me encanta Javascript!",聽 聽 },聽 聽 {聽 聽 聽 聽 username: "Oscar",聽 聽 聽 聽 timeline: "Bebeloper es lo mejor!",聽 聽 },聽 聽 {聽 聽 聽 聽 username: "Mariana",聽 聽 聽 聽 timeline: "A m铆 me gusta m谩s el caf茅 que el t茅",聽 聽 },聽 聽 {聽 聽 聽 聽 username: "Andres",聽 聽 聽 聽 timeline: "Yo hoy no quiero trabajar",聽 聽 },]; let userName;let password; userName = 'mariana';password = '789'; let usuarioEncontrado; function usuarioExistente(username, password) {聽 聽 usuarioEncontrado = false;聽 聽 聽 聽 for (let i = 0; i < usersDatabase.length; i++) {聽 聽 聽 聽 if (聽 聽 聽 聽 聽 聽 usersDatabase\[i].username === userName && 聽 聽 聽 聽 聽 聽 usersDatabase\[i].password === password聽 聽 聽 聽 ) {聽 聽 聽 聽 聽 聽 console.log('BIENVENID@');聽 聽 聽 聽 聽 聽 usuarioEncontrado = true;聽 聽 聽 聽 聽 聽 break;聽 聽 聽 聽 }聽 聽 }聽 聽 聽 聽 if (!usuarioEncontrado) {聽 聽 聽 聽 console.log('Correo o contrase帽a incorrectos');聽 聽 } 聽 聽 return usuarioEncontrado} usuarioExistente(userName, password); /////////////////////// let signIn = ()=>{聽 聽 if (usuarioEncontrado === true){聽 聽 聽 聽 console.log(`Bienvenido ${userName}`)聽 聽 }} signIn(usuarioEncontrado) ```js const usersDatabase = [ { username: "andres", password: "123", }, { username: "caro", password: "456", }, { username: "mariana", password: "789", }, ]; const usersTimeline = [ { username: "Estefany", timeline: "Me encanta Javascript!", }, { username: "Oscar", timeline: "Bebeloper es lo mejor!", }, { username: "Mariana", timeline: "A m铆 me gusta m谩s el caf茅 que el t茅", }, { username: "Andres", timeline: "Yo hoy no quiero trabajar", }, ]; let userName; let password; userName = 'mariana'; password = '789'; let usuarioEncontrado; function usuarioExistente(username, password) { usuarioEncontrado = false; for (let i = 0; i < usersDatabase.length; i++) { if ( usersDatabase[i].username === userName && usersDatabase[i].password === password ) { console.log('BIENVENID@'); usuarioEncontrado = true; break; } } if (!usuarioEncontrado) { console.log('Correo o contrase帽a incorrectos'); } return usuarioEncontrado } usuarioExistente(userName, password); /////////////////////// let signIn = ()=>{ if (usuarioEncontrado === true){ console.log(`Bienvenido ${userName}`) } } signIn(usuarioEncontrado) ```
```js const readlineSync = require('readline-sync'); const usersDatabase = [ { username: 'Fred', password: '123' }, { username: 'James', password: '456' }, { username: 'Tiesto', password: '789' } ] const userTimeline = [ { username: 'Kygo', timeline: 'This is Tropical House' }, { username: 'Armin', timeline: 'This is Trance' }, { username: 'Tiesto', timeline: 'This is Trance' }, { username: 'Fred', timeline: 'This is Pop' } ] const username = readlineSync.question("username: ") console.log('Your user name:',username) const password = readlineSync.question("password: ") console.log('Your password:',password) function validUser(username, password) { for (let user of usersDatabase) { if (user.username === username && user.password === password){ return true } } return false } function singIn(username, password) { if (validUser(username, password)) { console.log(`user: ${username} has been valid`) printTimeline(username) } else { console.log(`user: ${username} has not been found`) } } function printTimeline(username) { const isThereTimeline = userTimeline.find(timeline => timeline.username === username) if (isThereTimeline) { console.log(`User: ${username} told us` , isThereTimeline.timeline) } else { console.log(`User: ${username} without timline`) } } singIn(username, password) ```const readlineSync = require('readline-sync'); const usersDatabase = \[ { username: 'Fred', password: '123' }, { username: 'James', password: '456' }, { username: 'Tiesto', password: '789' }] const userTimeline = \[ { username: 'Kygo', timeline: 'This is Tropical House' }, { username: 'Armin', timeline: 'This is Trance' }, { username: 'Tiesto', timeline: 'This is Trance' }, { username: 'Fred', timeline: 'This is Pop' }] const username = readlineSync.question("username: ")console.log('Your user name:',username) const password = readlineSync.question("password: ")console.log('Your password:',password) function validUser(username, password) { for (let user of usersDatabase) { if (user.username === username && user.password === password){ return true } } return false} function singIn(username, password) { if (validUser(username, password)) { console.log(`user: ${username} has been valid`) printTimeline(username) } else { console.log(`user: ${username} has not been found`) }} function printTimeline(username) { const isThereTimeline = userTimeline.find(timeline => timeline.username === username) if (isThereTimeline) { console.log(`User: ${username} told us` , isThereTimeline.timeline) } else { console.log(`User: ${username} without timline`) }} singIn(username, password)
As铆 quedo el mio jeje `const usersDatabase = [聽 { username: "andres", password: "123" },聽 { username: "caro", password: "456" },聽 { username: "mariana", password: "789" },];const usersTimeline = [聽 { username: "Estefany", timeline: "Me encata Javascript!" },聽 { username: "Oscar", timeline: "Bebeloper es lo mejor!" },聽 { username: "Mariana", timeline: "A mi me gusta m脙隆s el caf脙漏 que el t脙漏" },聽 { username: "Andres", timeline: "Yo hoy no quiero trabajar" },];` `let usuario = prompt('Ingresa tu nombre de usuario', '');let contrase帽a = prompt('Ingresa tu contrase帽a', '');` `function validarUsuario(``usuario``, ``contrase帽a``){聽 聽 for (const i in usersDatabase) {聽 聽 聽 聽 if(usersDatabase[i].username === usuario && usersDatabase[i].password === contrase帽a){ 聽聽 聽 聽 聽 聽 聽 return true;聽 聽 聽 聽 }聽 聽 }聽 聽 return false;}` `function signIn(){聽 聽 if(validarUsuario(usuario, contrase帽a)){聽 聽 聽 聽 const userTimeLine = usersTimeline.find(``timeline``` => timeline.username.toLowerCase() === usuario);聽 聽 聽 聽 console.log(userTimeLine);聽 聽 聽 聽 if(userTimeLine){聽 聽 聽 聽 聽 聽 alert(`Bienvenido ${usuario}, ${userTimeLine.timeline}`);聽 聽 聽 聽 }else{聽 聽 聽 聽 聽 聽 alert('Usuario no valido');聽 聽 聽 聽 }聽 聽 } }`` `signIn();`
A帽adi una funci贸n extra para imprimir el Timeline de cada uno ```js const username = prompt("Cu谩l es tu usuario?"); const password = prompt("Cu谩l es tu contrase帽a?"); function usuarioExistente(username, password) { for (let i = 0; i < usersDatabase.length; i++) { if ( usersDatabase[i].username === username && usersDatabase[i].password === password ) { return true; break; } } return false; } function signIn(username,password){ if(usuarioExistente(username,password)){ alert(`Bienvenido, ${username}`) printTimeline(username) }else{ alert("Usuario o contrase帽a incorrectos"); } } function printTimeline(username){ const thereIsAtimeLine = usersTimeline.find((timeline)=>timeline.username.toLowerCase()===username) if(thereIsAtimeLine){ console.log(`${username}. Tu timeline es: ${thereIsAtimeLine.timeline}`) }else console.log("No hay ninguna timeline. D=") } signIn(username,password) ```
```js const usersDatabase = [ { username: "andres", password: "123", }, { username: "caro", password: "456", }, { username: "mariana", password: "789", }, ]; const usersTimeline = [ { username: "Estefany", timeline: "Me encata Javascript!", }, { username: "Oscar", timeline: "Bebeloper es lo mejor!", }, { username: "Mariana", timeline: "A mi me gusta m脙隆s el caf脙漏 que el t脙漏", }, { username: "Andres", timeline: "Yo hoy no quiero trabajar", }, ]; class AutenticateUser { constructor(username, password) { this.username = username; this.password = password; } login() { let autenticate = usersDatabase.find(user => user.username === this.username) && this.password === usersDatabase.find(user => user.username === this.username).password; if (autenticate) { return `Bienvenido al sistema ${this.username}! Timelines: ${JSON.stringify(usersTimeline)}`; } else { return "El usuario o la contrase帽a son incorrectos"; } } } const usuario = "caro"; const contrasenia = "4561"; const user = new AutenticateUser(usuario, contrasenia); console.log(user.login()); ```const usersDatabase = \[聽 聽 { 聽 聽 聽 聽 username: "andres", 聽 聽 聽 聽 password: "123", 聽 聽 }, { 聽 聽 聽 聽 username: "caro", 聽 聽 聽 聽 password: "456", 聽 聽 }, { 聽 聽 聽 聽 username: "mariana", 聽 聽 聽 聽 password: "789", 聽 聽 },]; const usersTimeline = \[聽 聽 { 聽 聽 聽 聽 username: "Estefany", 聽 聽 聽 聽 timeline: "Me encata Javascript!", 聽 聽 }, { 聽 聽 聽 聽 username: "Oscar", 聽 聽 聽 聽 timeline: "Bebeloper es lo mejor!", 聽 聽 }, { 聽 聽 聽 聽 username: "Mariana", 聽 聽 聽 聽 timeline: "A mi me gusta m脙隆s el caf脙漏 que el t脙漏", 聽 聽 }, { 聽 聽 聽 聽 username: "Andres", 聽 聽 聽 聽 timeline: "Yo hoy no quiero trabajar", 聽 聽 },]; class AutenticateUser {聽 聽 constructor(username, password) {聽 聽 聽 聽 this.username = username;聽 聽 聽 聽 this.password = password;聽 聽 } 聽 聽 login() {聽 聽 聽 聽 let autenticate = usersDatabase.find(user => user.username === this.username) && this.password === usersDatabase.find(user => user.username === this.username).password;聽 聽 聽 聽 聽 聽 聽 聽 if (autenticate) {聽 聽 聽 聽 聽 聽 return `Bienvenido al sistema ${this.username}! Timelines: ${JSON.stringify(usersTimeline)}`;聽 聽 聽 聽 } else {聽 聽 聽 聽 聽 聽 return "El usuario o la contrase帽a son incorrectos";聽 聽 聽 聽 }聽 聽 }} const usuario = "caro";const contrasenia = "4561";const user = new AutenticateUser(usuario, contrasenia);console.log(user.login());
![]()![](https://static.platzi.com/media/user_upload/loginApp-7b141139-fc4b-4cee-9246-c846b4d7148e.jpg)
Este proyecto me ha parecido muy interesante, me encantaria que continuaran con este proyecto creando las interfaces graficas
Comparto la parte del c贸digo para extraer el timeline del usuario: ```js // Se busca el timeline correspondiente al usuario autenticado const userTimeline = usersTimeline.find( (user) => user.username.toLowerCase() === authenticatedUsername.toLowerCase() ); // Mostrar el timeline si se encuentra if (userTimeline) { console.log(`Timeline de ${userTimeline.username}: "${userTimeline.timeline}"`); // Puedes tambi茅n mostrar el timeline en un elemento del DOM const timelineElement = document.getElementById('timeline'); if (timelineElement) { timelineElement.textContent = `Timeline: ${userTimeline.timeline}`; } } else { // Se muestra mensaje de error si no se encontr贸 timeline console.log("No se encontr贸 un timeline para este usuario."); } ```