LoginByEmail.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <!--
  2. Copyright 2019 Hackware SpA <human@hackware.cl>
  3. This file is part of "Hackware Userland" and licensed under the terms
  4. of the GNU Affero General Public License version 3, or (at your option)
  5. a later version. You should have received a copy of this license along
  6. with the software. If not, see <https://www.gnu.org/licenses/>.
  7. -->
  8. <template>
  9. <form
  10. class="login-by-email"
  11. @submit.prevent="submitLogin"
  12. >
  13. <h1>Accede vía email</h1>
  14. <div
  15. v-if="errorMessage"
  16. class="login-error"
  17. >
  18. <i class="fa fa-exclamation-triangle" />
  19. {{ errorMessage }}
  20. </div>
  21. <div
  22. v-if="successMessage"
  23. class="login-success"
  24. >
  25. <i class="fa fa-check-circle" />
  26. {{ successMessage }}
  27. </div>
  28. <input
  29. id="username"
  30. type="text"
  31. placeholder="Usuario o email"
  32. name="username"
  33. required
  34. autofocus
  35. >
  36. <button
  37. id="btnRequestEmail"
  38. type="submit"
  39. >
  40. <i class="fa fa-envelope" />
  41. Solicitar enlace de acceso
  42. </button>
  43. <p>
  44. <router-link :to="{ name: 'login-by-password' }">
  45. Iniciar sesión con contraseña
  46. </router-link>
  47. </p>
  48. </form>
  49. </template>
  50. <script>
  51. export default {
  52. name: 'LoginByEmail',
  53. data() {
  54. return {
  55. errorMessage: null,
  56. successMessage: null,
  57. };
  58. },
  59. methods: {
  60. submitLogin(event) {
  61. const btnRequestEmail = document.getElementById('btnRequestEmail');
  62. btnRequestEmail.setAttribute('disabled', true);
  63. this.errorMessage = null;
  64. return this.$fetcher.hawesePost('/auth/email-token', event.target, {}, false)
  65. .then(response => response.json())
  66. .then((body) => {
  67. if ('error' in body) {
  68. btnRequestEmail.removeAttribute('disabled');
  69. this.errorMessage = body.error.message;
  70. } else {
  71. this.successMessage = `Por favor inicia sesión desde el link enviado a ${body.email}`;
  72. }
  73. });
  74. },
  75. },
  76. };
  77. </script>