private function setAccountKeyAndContinue(PhabricatorExternalAccount $account, $next_uri)
 {
     if ($account->getUserPHID()) {
         throw new Exception(pht('Account is already registered or linked.'));
     }
     // Regenerate the registration secret key, set it on the external account,
     // set a cookie on the user's machine, and redirect them to registration.
     // See PhabricatorAuthRegisterController for discussion of the registration
     // key.
     $registration_key = Filesystem::readRandomCharacters(32);
     $account->setProperty('registrationKey', PhabricatorHash::digest($registration_key));
     $unguarded = AphrontWriteGuard::beginScopedUnguardedWrites();
     $account->save();
     unset($unguarded);
     $this->getRequest()->setTemporaryCookie(PhabricatorCookies::COOKIE_REGISTRATION, $registration_key);
     return id(new AphrontRedirectResponse())->setURI($next_uri);
 }