5

パッケージで使用dart-lang/rpcしています。shelf_rpc

リソースの中には認証が必要なものがあります。私はJWTを使用することに決め、 JwtSessionHandlerfromを使用したいと考えましたshelf_auth

私の単純化されたセットアップは次のようになります。

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

(たとえば)loginMiddlewareで始まるリクエストにのみ追加するにはどうすればよいですか? /accountまたはさらに良い: loginMiddlewareRPC リソース自体で を定義することは可能ですか (認証を変更して無効にする可能性のあるパスプレフィックスを定義する代わりに)?

4

2 に答える 2

1

そのパスがアカウントで始まる場合にのみ何かを行うハンドラーを作成するだけです。これはうまくいくはずです。

 shelf.Handler _accountHandler(shelf.Handler innerHandler) {
   return (shelf.Request request) {
   if (request.url.path.startsWith("/account")) {
   /// do something here
   }
   return innerHandler(request);
 };
于 2016-06-21T02:42:12.403 に答える