2014-06-26 6 views
5

Es gibt nicht viele Beispiele für hapi und seine auth-Cookie-Plugin, aber hier ist, was ich bisher in einem Versuch, eine Route zu sichern. Beachten Sie, dass die meisten der Beispiele, die ich gesehen habe, sind eine ältere Version von hapi verwendet, die nicht auf diese Situation recht gelten scheint und im im nur der Hoffnung, etwas fehlt einfach:hapi-auth-cookie Session-Strategie nicht laden

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); 
    }); 
}); 

Und in meinem togo Plugin I haben diese Route Setup die Sitzung

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' 
     } 
    }); 
}; 

Der Fehler im Sehen ist diese zu verwenden:

/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) 

Laufknoten 0.10.28, hapijs 6.x, hapi-auth-Cookie 1.02

+0

Sind Sie immer noch zur Zeit ein Problem vorliegt, dass die Abhängigkeit registrieren? Ich habe Ihr Repo in GitHub gefunden und es scheint gut zu funktionieren. – dylants

+0

hi @ dylants Ich konnte das Problem umgehen, indem ich die Auth-Strategie im Plugin selbst registrierte und es funktioniert, aber ich bin nicht sicher, ob das der beste Weg ist. Ich muss immer sicherstellen, dass das Auth-Plugin zuerst geladen wird – battlemidget

Antwort

1

Dieses Problem tritt auf, wenn Sie versuchen, eine Authentifizierungsstrategie zu verwenden, bevor sie tatsächlich verfügbar ist.

Sie folgen bereits einer guten Anwendungskonfiguration, indem Sie die Funktionalität in einzelne kleine Plugins mit einem bestimmten Umfang aufteilen.


UPDATE: hier ist ein spezielles Tutorial für dieses Problem, how to fix „unknown authentication strategy“


Eine gute Möglichkeit, die Authentifizierung und die Plugins einrichten, die auf Authentifizierung angewiesen ist ein extra "Auth Plugin" zu erstellen Das fügt Ihre gewünschten Strategien hinzu und kann als Abhängigkeit in Ihren anderen Plugins verwendet werden.

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' 
} 

In Ihrem /plugins/togo Sie die authentication plugin als Abhängigkeit gesetzt (mit server.dependency([array-of-deps])), was bedeutet hapi die Auth Plugin danach erste und die je diejenigen registriert.

Sie registrieren Ihre Plugins wie folgt aus:

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

prüfen hapi-rethinkdb-dash für ein detailliertes Beispiel.

Hoffe, dass hilft!

0

im Auge zu behalten, wenn Sie server.dependency in einem Plugin wie Marcus Poehls verwendet haben, müssen Sie auch

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