Używam pakietu dart-lang/rpc
z pakietem shelf_rpc
.Używanie rzutki RPC i shelf_auth do niektórych procedur
Niektóre z moich zasobów wymagają uwierzytelnienia. Postanowiłem przejść z JWT i chcę użyć JwtSessionHandler
z shelf_auth
.
Moja uproszczona konfiguracja wygląda następująco:
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));
Jak tylko dodam loginMiddleware
do wniosków, które zaczynają się /account
(na przykład)? A nawet lepiej: czy możliwe jest zdefiniowanie loginMiddleware
w samym zasobie RPC (zamiast zdefiniowania prefiksu ścieżki, który może potencjalnie zmienić i unieważnić uwierzytelnianie)?
Dobre pytanie. Nigdy nie korzystałem z pakietu rpc, ale ponieważ nie jest to pakiet natywny (tylko zaadaptowany przez shelf_rpc), nie widzę sposobu, w jaki można w łatwy sposób używać dowolnego oprogramowania pośredniczącego na półki (takiego jak uwierzytelnianie) w dowolnym miejscu zasobów rpc. – Anders