2014-06-26 8 views
5

Non ci sono molti esempi là fuori per hapi e il suo plugin auth-cookie, ma ecco quello che ho finora nel tentativo di proteggere un percorso. Si noti, la maggior parte degli esempi che ho visto si utilizza una versione precedente di Hapi, che non sembrano applicarsi molto a questa situazione e im sperando im manca solo qualcosa di semplice:hapi-auth-cookie non riesce a caricare la strategia di sessione

var Hapi = require('hapi'); 
var Mongoose = require('mongoose'); 

Mongoose.connect('mongodb://localhost/rfmproducetogo'); 

var server = new Hapi.Server(8080, "localhost"); 

server.pack.register([{ 
    plugin: require("lout") 
}, { 
    plugin: require('hapi-auth-cookie') 
}, { 
    plugin: require("./plugins/togo") 
}, { 
    plugin: require("./plugins/auth") 
}], function(err) { 
    if (err) throw err; 
    server.auth.strategy('session', 'cookie', { 
     password: 'shhasecret', 
     cookie: 'wtfisthisfor', 
     isSecure: false, 
     redirectTo: false 
    }); 
    server.start(function() { 
     console.log("hapi server started @ " + server.info.uri); 
    }); 
}); 

E nella mia togo plug I avere questa configurazione percorso per utilizzare la sessione

exports.create = function(plugin) { 
    plugin.route({ 
     method: 'POST', 
     path: '/togo/add', 
     handler: function(request, reply) { 
      produce = new Produce(); 
      produce.label = request.payload.label; 
      produce.price = request.payload.price; 
      produce.uom = request.payload.uom; 
      produce.category = request.payload.category; 

      produce.save(function(err) { 
       if (!err) { 
        reply(produce).created('/togo/' + produce._id); 
       } else { 
        reply(err); 
       } 

      }); 
     }, 
     config: { 
      auth: 'session' 
     } 
    }); 
}; 

l'errore im vedere è questo:

/home/adam/Projects/bushhog/node_modules/hapi/node_modules/hoek/lib/index.js:421 
    throw new Error(msgs.join(' ') || 'Unknown error'); 
     ^
Error: Unknown authentication strategy: session in path: /togo/add 
    at Object.exports.assert (/home/adam/Projects/bushhog/node_modules/hapi/node_modules/hoek/lib/index.js:421:11) 
    at /home/adam/Projects/bushhog/node_modules/hapi/lib/auth.js:123:14 
    at Array.forEach (native) 
    at internals.Auth._setupRoute (/home/adam/Projects/bushhog/node_modules/hapi/lib/auth.js:121:24) 
    at new module.exports.internals.Route (/home/adam/Projects/bushhog/node_modules/hapi/lib/route.js:118:43) 
    at /home/adam/Projects/bushhog/node_modules/hapi/lib/router.js:110:25 
    at Array.forEach (native) 
    at /home/adam/Projects/bushhog/node_modules/hapi/lib/router.js:107:17 
    at Array.forEach (native) 
    at internals.Router.add (/home/adam/Projects/bushhog/node_modules/hapi/lib/router.js:104:13) 

nodo 0.10.28 Correre, hapijs 6.x, Hapi-auth-cookie 1.02

+0

Stai ancora vivendo un problema? Ho trovato il tuo repository in GitHub e sembra funzionare bene. – dylants

+0

hi @dylants Sono stato in grado di aggirare il problema registrando la strategia di autenticazione all'interno del plugin stesso e funziona, ma non sono sicuro che questo sia il modo migliore. Dovrò sempre assicurarmi che il plugin auth sia caricato per primo – battlemidget

risposta

1

questo problema si verifica quando si tenta di utilizzare una strategia di autenticazione prima che sia effettivamente disponibile.

Stai già seguendo una buona configurazione dell'applicazione suddividendo la funzionalità in singoli plug-in con un determinato ambito.


UPDATE: ecco un tutorial dedicato per quel problema, how to fix „unknown authentication strategy“


Un buon modo per impostare l'autenticazione e i tuoi plugin che si basano su di autenticazione è quello di creare un extra "auth plug-in" che aggiunge le tue strategie desiderate e può essere usato come dipendenza dagli altri plugin.

hapi auth plugin example

exports.register = function (server, options, next) { 

    // declare/register dependencies 
    server.register(require('hapi-auth-cookie'), err => { 

    /** 
    * Register authentication strategies to hapi server 
    * 
    * We’re using hapi-auth-cookie plugin to store user information on 
    * client side to remember user data on every website visit 
    * 
    * For sure, we could and will add more authentication strategies. 
    * What’s next: JWT (we highly welcome pull requests to add JWT functionality!) 
    */ 
    server.auth.strategy('session', 'cookie', { 
     password: 'ThisIsASecretPasswordThisIsASecretPassword', 
     cookie: 'hapi-rethink-dash', 
     redirectTo: '/login', 
     isSecure: false 
    }); 

    server.log('info', 'Plugin registered: cookie authentication with strategy »session«') 

    next() 

    }) 

} 

exports.register.attributes = { 
    name: 'authentication', 
    version: '1.0.0' 
} 

Nella tua /plugins/togo si imposta il authentication plugin come una dipendenza (con server.dependency([array-of-deps])) il che significa che Hapi registra il plugin auth prima e quelli in funzione in seguito.

si registra il plugin in questo modo:

server.register([{ 
    plugin: require('./plugins/authentication') 
}, { 
    plugin: require("./plugins/togo") 
}], function(err) { 
    // handle callback 
}) 

Controllare hapi-rethinkdb-dash per un esempio dettagliato.

Spero che questo aiuti!

0

tenere a mente se si utilizza server.dependency all'interno di un plugin come Marcus Poehls ha, è anche bisogno di registrare che la dipendenza

server.register([{ 
    plugin: require('hapi-auth-cookie') 
},{ 
    plugin: require('./plugins/authentication') 
}, { 
    plugin: require("./plugins/togo") 
}], function(err) { 
    // handle callback 
}) 
Problemi correlati