Bienvenida e introducción

1

Qué aprenderás sobre autenticación con OAuth

2

Stack de seguridad para aplicaciones modernas

3

Autenticación

4

Autorización

JSON Web Tokens

5

JSON Web Tokens

6

Autenticación tradicional vs JWT

7

Configuración inicial de los proyectos

8

Firmando un JWT

9

Verificando nuestro JWT firmado y buenas practicas con JWT

10

Server-Side vs Client-Side sessions

11

Protegiendo nuestros recursos con JWT

12

Habilitando CORS en nuestro servidor

13

Profundizando el concepto de JWKS

OAuth 2.0

14

Cómo elegir el flujo adecuado para OAuth 2.0

15

¿Qué es OAuth 2.0?

16

Conociendo el API de Spotify

17

Creando los clientes de Spotify y servicios iniciales

18

Implementando Authorization Code Grant

19

Usando nuestro access token para obtener nuestros recursos

20

Implementando Implicit Grant

21

Implementando nuestro servicio de autenticación

22

Modificando nuestro Layout

23

Implementando Client Credentials Grant

24

Implementando Resource Owner Password Grant

25

Implementando Authorization Code Grant (PKCE)

Open ID Connect

26

¿Qué es OpenID Connect?

27

Implementando OpenID Connect

Preocupaciones con JWT y OAuth 2.0

28

¿Cuáles son las preocupaciones con JWT?

29

¿Cuáles son las preocupaciones con OAuth 2.0?

Haciendo uso de Auth0

30

¿Qué es Auth0?

31

Auth0 Lock y auth0.js

32

Universal Login

33

Social Login con Auth0

34

Custom Social connection con Spotify

35

Multifactor authentication

36

Authorization Extension en Auth0

Consideraciones para producción

37

Buenas prácticas para el despliegue en producción

38

Uso de diferentes tenants para producción con Auth0

Cierre del curso

39

Cierre del curso

Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Usando nuestro access token para obtener nuestros recursos

19/39
Recursos

Aportes 11

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Creo que falta una parte, porque no hemos definido la función getUserInfo pero aquí ya aparece de la nada.

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

Que vergüenza que no revisen el curso completo antes de subirlo, siempre igual, errores por todos lados, por no revisar

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

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

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

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 😦

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!!!