/**
  * Performs ajax signup.
  * @since 1.0
  */
 public function ajax()
 {
     header('Content-Type: application/json');
     if (get_option('addon_login_crossdomain', false)) {
         header('Access-Control-Allow-Origin: *');
     }
     try {
         // Method validation
         if ('POST' != $_SERVER['REQUEST_METHOD']) {
             throw new Exception('Invalid request method.');
         }
         // Token validation
         if (Request::input('_token') != LoginPage::get_token()) {
             throw new Exception('Invalid security token.');
         }
         $userdata = $this->generate_userdata();
         // Run validations
         $errors = $this->validate($userdata);
         do_action('register_post', $userdata['user_login'], $userdata['user_email'], $errors);
         $errors = apply_filters('registration_errors', $errors, $userdata['user_login'], $userdata['user_email']);
         if (!empty($errors->errors)) {
             $raw = [];
             foreach ($errors->get_error_messages() as $message) {
                 $raw[] = $message;
             }
             echo json_encode(['errors' => $raw, 300]);
             wp_die();
         }
         // Insert other
         $userdata['ID'] = wp_insert_user($userdata);
         do_action('user_register', $userdata['ID']);
         $message = 'Your account has been created!' . '<div><a href="' . LoginPage::get_redirect_to() . '">> back to page I was reading</a></div>' . '<a href="' . home_url('/wp-login.php') . '?redirect_to=' . LoginPage::get_redirect_to() . '">> login now</a>';
         echo json_encode(['message' => apply_filters('addon_loginpage_signup_message', $message), 200]);
     } catch (Exception $e) {
         echo json_encode(['errors' => [$e->getMessage()], 300]);
     }
     wp_die();
 }
 /**
  * Performs login operation.
  * @since 1.0
  */
 protected function do_login()
 {
     // Redirect to.
     $redirect_to = LoginPage::get_redirect_to();
     // Cookie authentication
     if ($this->cookie_authenticate()) {
         wp_safe_redirect(LoginPage::get_redirect_to());
     } else {
         wp_enqueue_script('addon-loginpage');
         return $this->view->get('addons.loginpage.login', ['token' => LoginPage::generate_token(), 'action' => admin_url('admin-ajax.php?action=addon_login'), 'redirect_to' => Request::input('redirect_to')]);
     }
 }