---
# System prepended metadata

title: 'Refactoring `isLoggedIn` status in C+ - Thurs 8th Oct, 2020'
tags: [C+, reactivevariables, programmingjournal, '2020', apolloclient, refreshtoken, auth]

---

# Refactoring `isLoggedIn` status in C+ - Thurs 8th Oct, 2020

Today, I finished implementing the Firebase analytics and crashylitics I've talked about in previous posts this week. One thing I need to still test is whether or not there are any problems with the build pipeline.

I am adding refresh token handling (ie. when the existing access token has expired, the app should pause further API requests, ask for a new access token by sending along the refresh token, and if this is successful, resend the previous batched requests, all without requiring the user to do anything) to C+.

A good place to do this in Apollo Client is in the [Error Link](https://www.apollographql.com/docs/react/api/link/apollo-link-error/). However, this presents me a problem.

I currently have my `isSignedIn` value managed by an "AuthProvider" [as recommended by React Navigation themselves](https://reactnavigation.org/docs/auth-flow/#how-it-will-work). This does not work in the `errorLink` though, as it is not a React component or hook, so I cannot access this auth context.

As such, I am refactoring my app's auth status to make use of Apollo Client's new [Reactive variables](https://www.apollographql.com/docs/react/local-state/reactive-variables/).

This is my plan so far:

```typescript=
export type AuthStatus = 'loggedIn' | 'loggedOut' | 'unknown'

// "unknown" is default as there is a moment when fetching the token out of storage where we don't know if it exits or not
export const authenticate = makeVar<AuthStatus>('unknown')

export const cache = new InMemoryCache({
    typePolicies: {
        Query: {
            fields: {
                authStatus: {
                    read() {
                        return authenticate()
                    },
                },
            },
        },
    },
})
```

I will detail my efforts further tomorrow.

###### tags: `programmingjournal` `2020` `C+` `auth` `reactivevariables` `apolloclient` `refreshtoken`