Securing Routes: Solution

In notebook:
Building Modern Web Apps
Created at:
2016-02-02
Updated:
2016-02-02
Tags:
libraries JavaScript React
  // ****     router.js       ****
import ...

// ++++ 1. add the requiresAuth function
function requiresAuth(handlerName) {
    // need to create a closure
    // to be able to refernce 'this'
    return function () {
        if(app.me.token) {
            this[handlername].apply(this, arguments)
        } else {
            this.redirectTo('/')
        }
    }
}

export default Router.extend({
    renderPage (page, opts = {layout:true}) { ... }
    
    routes: { 
        '': 'public',
        'repos': requiresAuth('repos'),
        'login': 'login',
        'logout': 'logout',
        'auth/callback?:query': requiresAuth('authCallback'),
        'repo/:owner/:name': 'repoDetail'

    },
    public () { ... },
    
    repos () { ... },

    repoDetail (owner, name) { ... }    
    
    login () { ... },

    authCallback (query) { ... },

    logout () { ... }   
})
Recommends the book: "Javascript allongé"