Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Autenticación: Vue.js + JWT

Autenticación: Vue.js + JWT

Esta charla muestra como podemos implementar autenticacion JWT en SPA's desarrolladas con Vue.js

Ignacio Anaya

November 02, 2017
Tweet

More Decks by Ignacio Anaya

Other Decks in Programming

Transcript

  1. Ignacio Anaya @ianaya89 > Full Stack Developer, Tech Trainer &

    Speaker > Embajador @Auth0 > Organizador @Vuenos_Aires { Autenticación: Vue.js + JWT } - @ianaya89 2
  2. ! Por Qué Token? — Sin Estado — Desacoplado —

    Escalable { Autenticación: Vue.js + JWT } - @ianaya89 3
  3. ! Por Qué JWT? — Estandard — Seguro — Auto

    Contenido — JSON ! { Autenticación: Vue.js + JWT } - @ianaya89 5
  4. ! JWT ! Header { "alg": "HS256", "typ": "JWT" }

    { Autenticación: Vue.js + JWT } - @ianaya89 7
  5. ! JWT ! Payload { "sub": "1234567890", "name": "John Doe",

    "admin": true, "iss": "https://api.com" } { Autenticación: Vue.js + JWT } - @ianaya89 8
  6. ! JWT ! Caso de Uso — SPA's — Serverless

    — API's — Mobile — IoT { Autenticación: Vue.js + JWT } - @ianaya89 10
  7. ! Herramientias — Auth API — vue-router — trae (http

    library) — localStorage { Autenticación: Vue.js + JWT } - @ianaya89 12
  8. ! Auth API — Obtener JWT — Validar JWT —

    node, express, jsonwebtoken, express-jwt { Autenticación: Vue.js + JWT } - @ianaya89 14
  9. ! vue-router — SPA's — 1 route = 1 component

    { Autenticación: Vue.js + JWT } - @ianaya89 15
  10. ! vue-router Routes Meta const router = new Router({ routes:

    [{ path: '/', component: Home }, { path: '/login', component: Login, meta: { isPublic: true } }] }) { Autenticación: Vue.js + JWT } - @ianaya89 16
  11. ! vue-router Guardian Navs router.beforeEach((to, from, next) => { //

    resolver si el usuario esta logueado if (!to.meta.isPublic && !isAuthenticated()) { return next('login') } next() }) { Autenticación: Vue.js + JWT } - @ianaya89 17
  12. ! trae — Libreria HTTP — Fetch Wrapper (con esteroides)

    — Similar axios — Usa Promises { Autenticación: Vue.js + JWT } - @ianaya89 18
  13. ! trae Ejemplo import trae from 'trae' trae.baseUrl('http://api:com') trae.get('/', {})

    .then(res => console.log(res.data)) .catch(err => console.log('[ERROR]', err)) { Autenticación: Vue.js + JWT } - @ianaya89 19
  14. ! trae Middlewares trae.before((config) => { const token = '123456789'

    config.headers['Authentication'] = token return config }) { Autenticación: Vue.js + JWT } - @ianaya89 20
  15. ! localStorage trae.post('/auth', { email, password }) .then(res => {

    localStorage.token = res.data localStorage.user = atob(res.data.split('.')[1]) }) .catch(err => console.log('[ERROR]', err)) { Autenticación: Vue.js + JWT } - @ianaya89 21
  16. ! Más! — jwt.io — Auth0 — jwt-handbook — trae

    — vue-router { Autenticación: Vue.js + JWT } - @ianaya89 23