authentication<T> function

  1. @experimental
Middleware authentication<T>({
  1. FutureOr<(bool, T?)> basicAuth(
    1. Request request,
    2. String authorization
    )?,
  2. FutureOr<(bool, T?)> bearerAuth(
    1. Request request,
    2. String token
    )?,
  3. FutureOr<(bool, T?)> apiKeyAuth(
    1. Request request,
    2. String value
    )?,
  4. FutureOr<(bool, T?)> customAuth(
    1. Request request
    )?,
  5. String headerKey = _headerApiKey,
  6. String bearerPrefix = _bearer,
})

Implementation

@experimental
Middleware authentication<T>({
  FutureOr<(bool, T?)> Function(Request request, String authorization)?
      basicAuth,
  FutureOr<(bool, T?)> Function(Request request, String token)? bearerAuth,
  FutureOr<(bool, T?)> Function(Request request, String value)? apiKeyAuth,
  FutureOr<(bool, T?)> Function(Request request)? customAuth,
  String headerKey = _headerApiKey,
  String bearerPrefix = _bearer,
}) {
  return (handler) {
    return (request) async {
      final (authorized, data) = await _isAuthorizedWithData<T?>(
        request,
        basicAuth,
        bearerAuth,
        apiKeyAuth,
        customAuth,
        headerKey,
        bearerPrefix,
      );
      if (authorized) {
        if (data == null) {
          return handler(request);
        }
        return handler(request.set<T>(() => data));
      }
      return Response.unauthorized('');
    };
  };
}