2017-02-18 3 views
0

Ich habe eine App mit Feathers erstellt. Ich benutze diese App für eine Weile. Es hostet erfolgreich einen Blog und einige andere Webseiten. Allerdings habe ich jetzt einen Punkt erreicht, an dem ich einige meiner Routen schützen muss. Ich möchte zum Beispiel eine Route für meine administrativen Aktivitäten (/ admin) haben, möchte aber nur bestimmten Benutzern Zugriff gewähren. Ich weiß, dass ich die authentication und Autorisierungskomponenten verwenden muss. Zu diesem Zeitpunkt bleibe ich jedoch bei der Autorisierung stecken. Mein Ziel ist die Authentifizierung mit OAuth über Google. Um jedoch meine Authentifizierungsherausforderung zu überwinden, würde ich mich freuen, wenn ich nur einen fest codierten Benutzernamen/ein Passwort verwende, nur um die Route /admin gesperrt zu bekommen (nein, sie wird nicht bereitgestellt).Federn - Authentifizierung und Autorisierung

Im Moment, ich habe

const app = feathers(); 
const routes = require('./routes'); 

app.configure(configuration(path.join(__dirname, '..'))); 

app.use(compress()) 
    .options('*', cors()) 
    .use(cors()) 
    .use(favicon(path.join(app.get('public'), 'favicon.ico'))) 
    .use('/public', serveStatic(app.get('public'), staticFileSettings)) 
    .use(bodyParser.json()) 
    .use(bodyParser.urlencoded({ extended: true })) 
    .configure(routes)  
    .configure(hooks()) 
    .configure(rest()) 
    .configure(socketio()) 
    .configure(services) 
    .configure(middleware) 
    .configure(authentication()) 
; 

// Setup the authentication strategy. 
app.authenticate({ 
    type: 'local', 
    'email': '[email protected]', 
    'password': 'admin' 
}).then(function(result){ 
    console.log('Authenticated!', result); 
}).catch(function(error){ 
    console.error('Error authenticating!', error); 
}); 

Mein Problem ist, sobald ich den Code-Block mit den app.authenticate Sachen hinzufügen, ich erhalte eine Fehlermeldung, wenn ich meine app starten. Der Fehler sagt:

TypeError: app.authenticate is not a function 

Wenn ich entfernen app.authenticate(...); Meine app beginnt in Ordnung, aber nichts ist gesperrt. In meiner ./routes/index.js Datei, die ich habe:

app.use('/admin', function(req, res) { 
    res.render('admin/index.html', {}); 
});  

Which, macht gut. Es ist nicht nur auf einen authentifizierten und autorisierten Benutzer beschränkt. Was vermisse ich? Bei einem bloßen Minimieren versuche ich zu verstehen, wie ich über den app.authenticate Fehler hinaus komme.

+0

Was versuchen Sie zu tun? 'app.authenticate' ist nur auf dem Client verfügbar (' feaths-authentication/client'). – Daff

+0

Letztendlich versuche ich zu verhindern, dass unautorisierte Benutzer auf die Ansicht auf der Route '/ admin' zugreifen. Nach meinem Verständnis muss ich zwei Dinge tun: 1) den Benutzer authentifizieren (ich möchte dies über den OAuth-Login von Google tun) und 2) den Benutzer autorisieren. Die obige Frage erklärt, wie ich auf # 1 feststecke. – Gary

Antwort

0

Um eine Route vor unbefugtem Zugriff zu schützen, müssen Sie follow the documented usage of express middleware von der feathers-authentication-Paket zur Verfügung gestellt, die installiert ist, wenn Sie feathers generate authentication tun.

Hier ist ein Beispiel für die Authentifizierung der /admin Route.

const auth = require('feathers-authentication'); 

app.use(
    '/admin', 
    auth.express.authenticate('jwt'), // <-- this is a strategy, can local/jwt... etc 
    (req, res, next) => { 
    console.log("Request for '/admin'..."); 
    res.render('admin'); 
    } 
); 
Verwandte Themen