diff --git a/google_analytics_reports_api/config/install/google_analytics_reports_api.settings.yml b/google_analytics_reports_api/config/install/google_analytics_reports_api.settings.yml
index ad76a68..bf28236 100644
--- a/google_analytics_reports_api/config/install/google_analytics_reports_api.settings.yml
+++ b/google_analytics_reports_api/config/install/google_analytics_reports_api.settings.yml
@@ -1,9 +1,5 @@
-access_token: ''
 cache_length: 259200
 client_id: ''
 client_secret: ''
 default_page: ''
-expires_at: 0
 profile_id: 0
-redirect_uri: ''
-refresh_token: ''
diff --git a/google_analytics_reports_api/config/schema/google_analytics_reports_api.schema.yml b/google_analytics_reports_api/config/schema/google_analytics_reports_api.schema.yml
index d4595f5..1696460 100644
--- a/google_analytics_reports_api/config/schema/google_analytics_reports_api.schema.yml
+++ b/google_analytics_reports_api/config/schema/google_analytics_reports_api.schema.yml
@@ -4,9 +4,6 @@ google_analytics_reports_api.settings:
   type: config_object
   label: 'Google Analytics Reports API settings'
   mapping:
-    access_token:
-      type: string
-      label: 'Access token from Google Analytics API'
     cache_length:
       type: integer
       label: 'Query cache length'
@@ -19,15 +16,6 @@ google_analytics_reports_api.settings:
     default_page:
       type: string
       label: 'Default page for selected profile'
-    expires_at:
-      type: integer
-      label: 'Token will work before this timestamp'
     profile_id:
       type: integer
       label: 'Google Analytics profile ID'
-    redirect_uri:
-      type: string
-      label: 'Redirect URI for Google Aanalytics API'
-    refresh_token:
-      type: string
-      label: 'Google Analytics API refresh token'
diff --git a/google_analytics_reports_api/google_analytics_reports_api.install b/google_analytics_reports_api/google_analytics_reports_api.install
index 56d9578..6f730d7 100644
--- a/google_analytics_reports_api/google_analytics_reports_api.install
+++ b/google_analytics_reports_api/google_analytics_reports_api.install
@@ -12,7 +12,7 @@ use Drupal\Core\Url;
 function google_analytics_reports_api_requirements($phase) {
   $requirements = [];
   if ($phase == 'runtime') {
-    $access_token = \Drupal::config('google_analytics_reports_api.settings')->get('access_token');
+    $access_token = \Drupal::state()->get('google_analytics_reports_api.access_token');
     $value = ($access_token) ? t('You have successfully authorized.') :
       t('You must <a href="@url">authorize</a> Drupal to use your Google Analytics account before you can view reports.', [
       '@url' => Url::fromRoute('google_analytics_reports_api.settings')
diff --git a/google_analytics_reports_api/google_analytics_reports_api.module b/google_analytics_reports_api/google_analytics_reports_api.module
index e7ff8ca..95789f3 100644
--- a/google_analytics_reports_api/google_analytics_reports_api.module
+++ b/google_analytics_reports_api/google_analytics_reports_api.module
@@ -18,27 +18,28 @@ use Drupal\Core\Url;
  */
 function google_analytics_reports_api_gafeed() {
   $config = \Drupal::configFactory()->getEditable('google_analytics_reports_api.settings');
+  $state = \Drupal::state();
 
   // If the access token is still valid, return an authenticated
   // GoogleAnalyticsReportsApiFeed.
-  $access_token = $config->get('access_token');
+  $access_token = $state->get('google_analytics_reports_api.access_token');
 
-  if ($access_token && time() < $config->get('expires_at')) {
+  if ($access_token && time() < $state->get('google_analytics_reports_api.expires_at')) {
     return new GoogleAnalyticsReportsApiFeed($access_token);
   }
   else {
     // If the site has an access token and refresh token, but the access
     // token has expired, authenticate the user with the refresh token.
-    $refresh_token = $config->get('refresh_token');
+    $refresh_token = $state->get('google_analytics_reports_api.refresh_token');
     if ($refresh_token) {
       try {
         $google_analytics_reports_api_feed = new GoogleAnalyticsReportsApiFeed();
         $google_analytics_reports_api_feed->refreshToken($config->get('client_id'), $config->get('client_secret'), $refresh_token);
 
-        $config
-          ->set('access_token', $google_analytics_reports_api_feed->accessToken)
-          ->set('expires_at', $google_analytics_reports_api_feed->expiresAt)
-          ->save();
+        $state->setMultiple([
+          'access_token' => $google_analytics_reports_api_feed->accessToken,
+          'expires_at' => $google_analytics_reports_api_feed->expiresAt,
+        ]);
 
         return $google_analytics_reports_api_feed;
       }
@@ -54,16 +55,17 @@ function google_analytics_reports_api_gafeed() {
       if (isset($_GET['code'])) {
         try {
           $google_analytics_reports_api_feed = new GoogleAnalyticsReportsApiFeed();
-          $redirect_uri = $config->get('redirect_uri');
+          $redirect_uri = $state->get('google_analytics_reports_api.redirect_uri');
 
           $google_analytics_reports_api_feed->finishAuthentication($config->get('client_id'), $config->get('client_secret'), $redirect_uri);
 
-          $config
-            ->set('access_token', $google_analytics_reports_api_feed->accessToken)
-            ->set('expires_at', $google_analytics_reports_api_feed->expiresAt)
-            ->set('refresh_token', $google_analytics_reports_api_feed->refreshToken)
-            ->clear('redirect_uri')
-            ->save();
+          $state->setMultiple([
+            'access_token' => $google_analytics_reports_api_feed->accessToken,
+            'expires_at' => $google_analytics_reports_api_feed->expiresAt,
+            'refresh_token' => $google_analytics_reports_api_feed->refreshToken,
+          ]);
+
+          $state->delete('google_analytics_reports_api.redirect_uri');
 
           drupal_set_message(t('You have been successfully authenticated.'));
 
@@ -136,18 +138,22 @@ function google_analytics_reports_api_revoke() {
   $ga_feed->revokeToken();
 
   $config = \Drupal::configFactory()->getEditable('google_analytics_reports_api.settings');
+  $state = \Drupal::state();
+
   // Delete module variables.
   $config
-    ->clear('access_token')
     ->clear('client_id')
     ->clear('client_secret')
     ->clear('default_page')
-    ->clear('expires_at')
     ->clear('profile_id')
-    ->clear('redirect_uri')
-    ->clear('refresh_token')
     ->save();
 
+  $state->deleteMultiple([
+    'google_analytics_reports_api.access_token',
+    'google_analytics_reports_api.expires_at',
+    'google_analytics_reports_api.refresh_token',
+    'google_analytics_reports_api.redirect_uri',
+  ]);
 }
 
 /**
diff --git a/google_analytics_reports_api/src/Form/GoogleAnalyticsReportsApiAdminSettingsForm.php b/google_analytics_reports_api/src/Form/GoogleAnalyticsReportsApiAdminSettingsForm.php
index 9d9d278..19607c5 100644
--- a/google_analytics_reports_api/src/Form/GoogleAnalyticsReportsApiAdminSettingsForm.php
+++ b/google_analytics_reports_api/src/Form/GoogleAnalyticsReportsApiAdminSettingsForm.php
@@ -177,9 +177,10 @@ class GoogleAnalyticsReportsApiAdminSettingsForm extends FormBase {
     $config
       ->set('client_id', $form_state->getValue('client_id'))
       ->set('client_secret', $form_state->getValue('client_secret'))
-      ->set('redirect_uri', $redirect_uri)
       ->save();
 
+    \Drupal::state()->set('google_analytics_reports_api.redirect_uri', $redirect_uri);
+
     $google_analytics_reports_api_feed = new GoogleAnalyticsReportsApiFeed();
     $google_analytics_reports_api_feed->beginAuthentication($form_state->getValue('client_id'), $redirect_uri);
   }
diff --git a/src/Plugin/views/query/GoogleAnalyticsQuery.php b/src/Plugin/views/query/GoogleAnalyticsQuery.php
index bec99b3..7de1e0d 100644
--- a/src/Plugin/views/query/GoogleAnalyticsQuery.php
+++ b/src/Plugin/views/query/GoogleAnalyticsQuery.php
@@ -7,6 +7,7 @@ use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Link;
 use Drupal\Component\Utility\Html;
+use Drupal\Core\State\StateInterface;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\Plugin\views\query\QueryPluginBase;
 use Drupal\views\ResultRow;
@@ -72,12 +73,20 @@ class GoogleAnalyticsQuery extends QueryPluginBase {
   public $configFactory;
 
   /**
+   * The state service.
+   *
+   * @var \Drupal\Core\State\StateInterface
+   */
+  protected $state;
+
+  /**
    * {@inheritdoc}
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, ModuleHandlerInterface $module_handler, ConfigFactoryInterface $config_factory, StateInterface $state) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
     $this->moduleHandler = $module_handler;
     $this->configFactory = $config_factory;
+    $this->state = $state;
   }
 
   /**
@@ -89,7 +98,8 @@ class GoogleAnalyticsQuery extends QueryPluginBase {
       $plugin_id,
       $plugin_definition,
       $container->get('module_handler'),
-      $container->get('config.factory')
+      $container->get('config.factory'),
+      $container->get('state')
     );
   }
 
@@ -305,7 +315,7 @@ class GoogleAnalyticsQuery extends QueryPluginBase {
    */
   public function execute(ViewExecutable $view) {
     // Initial check to see if we should attempt to run the query.
-    if (!$this->configFactory->get('google_analytics_reports_api.settings')->get('access_token')) {
+    if (!$this->state->get('google_analytics_reports_api.access_token')) {
       // Optionally do not warn users on every query attempt before auth.
       drupal_set_message(t('You must @link Drupal to use your Google Analytics account before you can view reports.', ['@link' => Link::createFromRoute('Authorize', 'google_analytics_reports_api.settings')]));
       return;
