Desidero implementare l'autenticazione e l'autorizzazione nello stack Flatiron (utilizzando Flatiron, Ricco e Riposo). Voglio richiedere che un utente abbia i permessi necessari, quando provi a cambiare una risorsa. Nel file Readme riposante, c'è un note about authorization:Autenticazione e autorizzazione con Flatiron's Resourceful & Restful
Ci sono diversi modi per garantire la sicurezza e l'autorizzazione per metodi di risorse che accede a vista con riposante. Il modello consigliato per l'autorizzazione consiste nell'utilizzare l'abilità di risorse per gli hook e
after
. In questi hook, è possibile aggiungere ulteriore business logic per limitare l'accesso ai metodi della risorsa.E 'Non consigliato di inserire la logica di autorizzazione nel instradamento livello, come in un mondo ideale il router sarà un'interfaccia riflesso della risorsa. In teoria, la sicurezza del router stesso dovrebbe essere un po 'irrilevante in quanto la risorsa potrebbe avere più interfacce riflesse che richiedevano tutte la stessa logica aziendale.
TL; DR; Per sicurezza e autorizzazione, è necessario utilizzare gli hook resourceful
before
eafter
.
Quindi l'autorizzazione può essere gestita dal sistema di aggancio di Resourceful.
Il mio problema reale è il processo di autenticazione all'inizio di ogni richiesta HTTP.
Diciamo che ho una risorsa Post
, una User
e una risorsa Session
. L'API REST viene definita utilizzando Restful. La mia preoccupazione principale per questa domanda è garantire che un utente abbia una sessione durante la creazione di un post. Altri metodi come save
, update
o altre risorse come la creazione di un utente dovrebbero funzionare in modo analogo.
File app.js
:
var flatiron = require('flatiron');
var app = flatiron.app;
app.resources = require('./resources.js');
app.use(flatiron.plugins.http);
app.use(restful);
app.start(8080, function(){
console.log('http server started on port 8080');
});
File resources.js
:
var resourceful = require('resourceful');
var resources = exports;
resources.User = resourceful.define('user', function() {
this.restful = true;
this.string('name');
this.string('password');
});
resources.Session = resourceful.define('session', function() {
// note: this is not restful
this.use('memory');
this.string('session_id');
});
resources.Post = resourceful.define('post', function() {
this.restful = true;
this.use('memory');
this.string('title');
this.string('content');
});
resources.Post.before('create', function authorization(post, callback) {
// What should happen here?
// How do I ensure, a user has a session id?
callback();
});
C'è anche un runnable version of the code (grazie @generalhenry).
Supponiamo quindi che un utente che sta tentando di creare un post abbia già ricevuto un ID di sessione, che viene inviato con ogni richiesta effettuata da un'intestazione del cookie. Come posso accedere a quel cookie nel gancio precedente (ad esempio la richiamata authorization
)?
L'esempio può essere avviato con node app.js
e richieste HTTP può essere effettuato utilizzando curl
.
Ho realizzato una versione runnable http://runnable.com/UUvAOjW8r6IwAAuN – generalhenry
@generalhenry Grazie! Quindi giochiamo con questo. – pvorb