diff --git a/src/aphront/console/DarkConsoleController.php b/src/aphront/console/DarkConsoleController.php
index 6f4671631..cb11db7b5 100644
--- a/src/aphront/console/DarkConsoleController.php
+++ b/src/aphront/console/DarkConsoleController.php
@@ -1,32 +1,41 @@
 <?php
 
 /**
  * @group console
  */
 final class DarkConsoleController extends PhabricatorController {
 
   protected $op;
   protected $data;
 
+  public function shouldRequireLogin() {
+    return !PhabricatorEnv::getEnvConfig('darkconsole.always-on');
+  }
+
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
+    $response = id(new AphrontAjaxResponse())->setDisableConsole(true);
+
+    if (!$user->isLoggedIn()) {
+      return $response;
+    }
 
     $visible = $request->getStr('visible');
     if (strlen($visible)) {
       $user->setConsoleVisible((int)$visible);
       $user->save();
-      return id(new AphrontAjaxResponse())->setDisableConsole(true);
+      return $response;
     }
 
     $tab = $request->getStr('tab');
     if (strlen($tab)) {
       $user->setConsoleTab($tab);
       $user->save();
-      return id(new AphrontAjaxResponse())->setDisableConsole(true);
+      return $response;
     }
 
     return new Aphront404Response();
   }
 
 }
diff --git a/src/aphront/console/DarkConsoleDataController.php b/src/aphront/console/DarkConsoleDataController.php
index af5364fea..f761308ad 100644
--- a/src/aphront/console/DarkConsoleDataController.php
+++ b/src/aphront/console/DarkConsoleDataController.php
@@ -1,70 +1,74 @@
 <?php
 
 /**
  * @group console
  */
 final class DarkConsoleDataController extends PhabricatorController {
 
   private $key;
 
+  public function shouldRequireLogin() {
+    return !PhabricatorEnv::getEnvConfig('darkconsole.always-on');
+  }
+
   public function willProcessRequest(array $data) {
     $this->key = $data['key'];
   }
 
   public function processRequest() {
     $request = $this->getRequest();
     $user = $request->getUser();
 
     $cache = new PhabricatorKeyValueDatabaseCache();
     $cache = new PhutilKeyValueCacheProfiler($cache);
     $cache->setProfiler(PhutilServiceProfiler::getInstance());
 
     $result = $cache->getKey('darkconsole:'.$this->key);
     if (!$result) {
       return new Aphront400Response();
     }
 
     $result = json_decode($result, true);
 
     if (!is_array($result)) {
       return new Aphront400Response();
     }
 
     if ($result['vers'] != DarkConsoleCore::STORAGE_VERSION) {
       return new Aphront400Response();
     }
 
     if ($result['user'] != $user->getPHID()) {
       return new Aphront400Response();
     }
 
     $output = array();
     $output['tabs'] = $result['tabs'];
     $output['panel'] = array();
 
     foreach ($result['data'] as $class => $data) {
       try {
         $obj = newv($class, array());
         $obj->setData($data);
         $obj->setRequest($request);
 
         $panel = $obj->renderPanel();
 
         if (!empty($_COOKIE['phsid'])) {
           $panel = PhutilSafeHTML::applyFunction(
             'str_replace',
             $_COOKIE['phsid'],
             '(session-key)',
             $panel);
         }
 
         $output['panel'][$class] = $panel;
       } catch (Exception $ex) {
         $output['panel'][$class] = 'error';
       }
     }
 
     return id(new AphrontAjaxResponse())->setContent($output);
   }
 
 }