Skip to content

Instantly share code, notes, and snippets.

@smkhalsa
Created October 26, 2020 18:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smkhalsa/e2bc94b869cb25f3326dd84dcc52c62e to your computer and use it in GitHub Desktop.
Save smkhalsa/e2bc94b869cb25f3326dd84dcc52c62e to your computer and use it in GitHub Desktop.
HeadersLink
import 'dart:async';
import 'package:ferry/ferry.dart';
import 'package:gql_http_link/gql_http_link.dart';
import 'package:gql_link/gql_link.dart';
import 'package:gql_exec/gql_exec.dart';
import 'package:rxdart/rxdart.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:get_it/get_it.dart';
import '../stores/user_store.dart';
Future<IdTokenResult> getToken() async {
final userStore = GetIt.I<UserStore>();
if (userStore.currentUser != null) return await userStore.getIdToken();
return null;
}
class HeadersLink extends Link {
@override
Stream<Response> request(
Request request, [
NextLink forward,
]) =>
Stream.fromFuture(getToken()).switchMap((result) {
final token = result?.token;
final headers = {
if (token != null) 'Authorization': token,
};
if (token != null) headers["Authorization"] = token;
final req = request.withContextEntry(HttpLinkHeaders(headers: headers));
return forward(req);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment