Sto usando dart-lang/rpc
con il pacchetto shelf_rpc
.Utilizzo di dardo RPC e shelf_auth per alcune procedure
Alcune delle mie risorse richiedono l'autenticazione. Ho deciso di andare con JWT e voglio usare lo JwtSessionHandler
da shelf_auth
.
La mia configurazione semplificata è simile al seguente:
final ApiServer _apiServer = new ApiServer();
main() async {
var loginMiddleware = authenticate([new UsernamePasswordAuthenticator(lookupByUsernamePassword)],
sessionHandler: new JwtSessionHandler('my app', 'shhh secret', usernameLookup), allowHttp: true);
_apiServer.addApi(new Api());
// Create a Shelf handler for your RPC API.
var apiHandler = shelf_rpc.createRpcHandler(_apiServer);
var apiRouter = shelf_route.router()
..add('/api', null, apiHandler, exactMatch: false);
var handler = const shelf.Pipeline()
.addMiddleware(loginMiddleware)
.addMiddleware(shelf.logRequests())
.addHandler(apiRouter.handler);
var server = await shelf_io.serve(handler, '0.0.0.0', 8087);
}
/// Stub implementation
lookupByUsernamePassword(String username, String password) async =>
new Some(new Principal(username));
/// Stub implementation
usernameLookup(String username) async =>
new Some(new Principal(username));
Come posso aggiungere solo la loginMiddleware
alle richieste che iniziano con /account
(per esempio)? O ancora meglio: è possibile definire lo loginMiddleware
sulla stessa risorsa RPC (invece di definire un prefisso del percorso che può potenzialmente modificare e annullare l'autenticazione)?
Buona domanda. Non ho mai usato il pacchetto rpc da solo, ma poiché non è un pacchetto di scaffali nativo (adattato solo tramite shelf_rpc) non vedo come si possa facilmente utilizzare qualsiasi middleware di scaffale (come l'autenticazione) ovunque all'interno delle risorse di rpc. – Anders