Creo que falta una parte, porque no hemos definido la función getUserInfo pero aquí ya aparece de la nada.
Bienvenida e introducción
Qué aprenderás sobre autenticación con OAuth
Stack de seguridad para aplicaciones modernas
Autenticación
Autorización
JSON Web Tokens
JSON Web Tokens
Autenticación tradicional vs JWT
Configuración inicial de los proyectos
Firmando un JWT
Verificando nuestro JWT firmado y buenas practicas con JWT
Server-Side vs Client-Side sessions
Protegiendo nuestros recursos con JWT
Habilitando CORS en nuestro servidor
Profundizando el concepto de JWKS
OAuth 2.0
Cómo elegir el flujo adecuado para OAuth 2.0
¿Qué es OAuth 2.0?
Conociendo el API de Spotify
Creando los clientes de Spotify y servicios iniciales
Implementando Authorization Code Grant
Usando nuestro access token para obtener nuestros recursos
Implementando Implicit Grant
Implementando nuestro servicio de autenticación
Modificando nuestro Layout
Implementando Client Credentials Grant
Implementando Resource Owner Password Grant
Implementando Authorization Code Grant (PKCE)
Open ID Connect
¿Qué es OpenID Connect?
Implementando OpenID Connect
Preocupaciones con JWT y OAuth 2.0
¿Cuáles son las preocupaciones con JWT?
¿Cuáles son las preocupaciones con OAuth 2.0?
Haciendo uso de Auth0
¿Qué es Auth0?
Auth0 Lock y auth0.js
Universal Login
Social Login con Auth0
Custom Social connection con Spotify
Multifactor authentication
Authorization Extension en Auth0
Consideraciones para producción
Buenas prácticas para el despliegue en producción
Uso de diferentes tenants para producción con Auth0
Cierre del curso
Cierre del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Guillermo Rodas
Aportes 11
Preguntas 5
Creo que falta una parte, porque no hemos definido la función getUserInfo pero aquí ya aparece de la nada.
Que vergüenza que no revisen el curso completo antes de subirlo, siempre igual, errores por todos lados, por no revisar
Tenia este error!
TypeError: /Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/views/playlists.pug:19
17| .card-image
18| figure.image
> 19| img(src=playlist.images[0].url)
20| .card-content
21| h1.title= playlist.name
22| h2.subtitle= playlist.owner.display_name
Cannot read property 'url' of undefined
at eval (eval at wrap (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:94:73)
at eval (eval at wrap (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:161:4)
at template (eval at wrap (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:217:190)
at Object.exports.renderFile (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/pug/lib/index.js:427:38)
at Object.exports.renderFile (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/pug/lib/index.js:417:21)
at View.exports.__express [as engine] (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/pug/lib/index.js:464:11)
at View.render (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/express/lib/view.js:135:8)
at tryRender (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/express/lib/application.js:640:10)
at Function.render (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/express/lib/application.js:592:3)
at ServerResponse.render (/Applications/XAMPP/xamppfiles/htdocs/platzi master/oauth/blog/node_modules/express/lib/response.js:1012:7)
y lo solucione con un if en pug, porque no siempre las playlists tienen una imagen!
extends layout.pug
block hero
section.hero.is-dark.is-medium.main-hero
.hero-body
.container
h1.title.is-size-1 Felida Music
h2.subtitle Share and add the best playlists from the community
block content
.container.main-content
.columns.is-multiline
each playlist in playlists.items
.column.is-one-quarters
.card
if playlist.images[0]
.card-image
figure.image
img(src=playlist.images[0].url)
.card-content
h1.title= playlist.name
h2.subtitle= playlist.owner.display_name
.card-footer
.card-footer-item
a.button.is-primary-is-fullwidth= `${isHome ? 'Ver tracks' : 'Agregar'}`
.card-footer-item
a.button.isfullwidth(href='#')
i.far.fa-thumbs-up
Una basura el curso, lo arruinaron por no revisar antes de subirlo, es incomprensible, no se puede seguir. Tendré que seguir en youtube
GRACIAS PLATZI!!!
No me estaba funcionando correctamente porque la playlist que tenía era privada.
Pueden establecer la lista como publica, o bien agregar un scope adicional en scopesArray.js
Si quieren consultar las playlists privadas del usuario con el que se autentican, agreguen este scope:
"playlist-read-private"
tomado de api Spotify
creo que este curso ya esta en la categoria de muy avanzado y deberia simplificarse xD o sea no soy junior pero a ratos me cuesta seguir al profe demasiado, tal vez usar pug y express para probar cosas simples como Oauth no fue la mejor alternativa, creo que podriamos hacerlo solo con express + html, y muchas de las librerias instaladas ya estan por defecto en express… ojala lo vuelvan a subir en una nueva version
Al final me queda el sabor de que en la edición se perdió la parte más importante: getUserInfo, getUserPlaylists… etc
Una lástima
la neta el Authorization Code Grant
Para quienes tengan un error para terminar la clase, en mi caso hubo una playlist llamada “importedStarred” que tenia el arreglo images vacio, por lo cual saltaba error, solucione de la siguiente manera:
...
const filteredPlaylists = userPlaylists.items.filter(elem => {
return elem.images.length
});
res.render("playlists", {
userInfo,
playlists: {items: filteredPlaylists}});
...
Muy buena explicación
Yo no pago Spotify, asi que no me aparece ninguna 😦
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?