Друкарня від WE.UA

ГУГЛ ШИТС + ГУГЛ АП СКРИПТ + HTML ФОРМА ЛОГІН \ РЕЄСТРАЦІЯ

Код не мій, але можливо це буде комусь цікаво бо гугл шинтс (вони ж гугл табиці) то потужний інструмент та ще й бескоштовний, гріх ним не користуватися.

Вступ

Одного разу мене цікавило логін та реєестарція черег гугл таблиці.
Цей код я знайшов на просторах ютубу, трохи його доробив ( або привів до робочого виду, бо там були якісь проблеми) .

Вся фішка в тому що вам не потрібен десь деплой Вашого сайту чи інші заморочки з цім ( правда не таке красиве посилання там) ось так воно виглядає https://script.google.com/macros/s/AKfycbyNscjXDGYEnuG83A-Nmo75Y5rIcDykQ9wjovndZ3j2DTSwzTqC5M-ifcAGAK84_s3CyQ/exec

Для повтору потрібно буде мати акаунт гугла, створити там таблицю, там зайти в гугл ап скрипт

apps sctipt

Відкриваєте його та вставляєте код нижче і вставляючи в нього посилання на вашу гугл таблицю ( не те посилання що вже буде в гугл ап скрипт, а саме таблиці)

Код для apps script

const SHEETS_URL = 'https://docs.google.com/spreadsheets/d/такого виду має бути посилання на гугл таблицю/edit?usp=sharing'; //посилання на таблицю
const SHEET_NAME = "Аркуш1"; // назва аркушу в таблиці

function doGet(e) {
  var x = HtmlService.createTemplateFromFile("index");
  var y = x.evaluate();
  var z = y.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
  return z;
}

function checkLogin(username, password) {
  try {
    var ss = SpreadsheetApp.openByUrl(SHEETS_URL);
    var webAppSheet = ss.getSheetByName(SHEET_NAME);
    var getLastRow = webAppSheet.getLastRow();
    var found_record = false;

    for (var i = 1; i <= getLastRow; i++) {
      var currentUsername = webAppSheet.getRange(i, 1).getValue().toString().trim();
      var currentPassword = webAppSheet.getRange(i, 2).getValue().toString().trim();
      Logger.log('Checking username: ' + currentUsername + ', password: ' + currentPassword);

      if (currentUsername && currentUsername.toUpperCase() === username.toUpperCase()) {
        Logger.log('Username match found');
        if (currentPassword && currentPassword.toUpperCase() === password.toUpperCase()) {
          Logger.log('Password match found');
          found_record = true;
          break;
        }
      }
    }

    return found_record ? 'TRUE' : 'FALSE';
  } catch (error) {
    Logger.log('Error in checkLogin: ' + error.toString());
    return 'FALSE';
  }
}

function AddRecord(usernamee, passwordd, email, phone) {
  try {
    var ss = SpreadsheetApp.openByUrl(SHEETS_URL);
    var webAppSheet = ss.getSheetByName(SHEET_NAME);
    webAppSheet.appendRow([usernamee, passwordd, email, phone]);
  } catch (error) {
    Logger.log('Error in AddRecord: ' + error.toString());
  }
}
додаєм html apps script

Створюємо хтмл файл саме з такою назвою яка буде вказана в коді скрипта

function doGet(e) {
  var x = HtmlService.createTemplateFromFile("index");

тобто index. Ви можете створити і іншу назву файлу, тільки треба буде замінити її і в коді скрипта.

Вставляємо код в html файл

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <script>
      function AddRow() {
        var usernamee = document.getElementById("usernamee").value;
        var passwordd = document.getElementById("passwordd").value;
        var email = document.getElementById("email").value;
        var phone = document.getElementById("phone").value;
        if (usernamee == "" || passwordd == "" || email == "" || phone == "") {
          return false;
        } else {
          google.script.run.AddRecord(usernamee, passwordd, email, phone);
          document.getElementById("page2_id1").className = "page2_id1-off";
          document.getElementById("page3_id1").className = "page3_id1";
        }
      }

      function LoginUser() {
        var username = document.getElementById("username").value;
        var password = document.getElementById("password").value;
        console.log("Attempting login with username:", username);
        console.log("Attempting login with password:", password);
        google.script.run.withSuccessHandler(function(output) {
          console.log("Login response:", output);
          if (output == 'TRUE') {
            document.getElementById("displayusername").innerHTML = username;
            document.getElementById("page1_id1").className = "page1_class1-off";
            document.getElementById("page4_id1").className = "page4_id1";
          } else if (output == 'FALSE') {
            document.getElementById("errorMessage").innerHTML = "Invalid data";
          }
        }).checkLogin(username, password);
      }



      function function1() {
        document.getElementById("page1_id1").className = "page1_class1-off";
        document.getElementById("page2_id1").className = "page2_id1";
      }

      function function3() {
        document.getElementById("page3_id1").className = "page3_id1-off";
        document.getElementById("page1_id1").className = "page1_class1";
      }
    </script>
    <style>
      /*page1*/
      .page1_class1-off { display: none; }

      /*page2*/
      .page2_class1 { display: none; }
      .page2_id1-off { display: none; }

      /*page3*/
      .page3_class1 { display: none; }
      .page3_id1-off { display: none; }

      /*page4*/
      .page4_class1 { display: none; }
      .page4_id1-off { display: none; }

      input[type=text]:hover { border-bottom: 2px solid black; }
      input[type=number]:hover { border-bottom: 2px solid black; }
      input[type=password]:hover { border-bottom: 2px solid black; }

      .user {
        display: inline-block;
        width: 75px;
        height: 75px;
        border: 8px solid black;
        border-radius: 50%;
        position: relative;
        overflow: hidden;
        box-sizing: border-box;
      }

      /*the head*/
      .user::before {
        content: '';
        display: inline-block;
        width: 24px;
        height: 24px;
        background: black;
        border-radius: 50%;
        position: absolute;
        left: calc(50% - 11px);
        top: 10px;
      }

      /*the body*/
      .user::after {
        content: '';
        display: inline-block;
        width: 50px;
        height: 40px;
        background: black;
        border-radius: 50%;
        position: absolute;
        left: calc(50% - 24px);
        top: 39px;
      }
    </style>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
  </head>
  <body>
    <br><br>
    <!--page1-->
    <center>
    
      <div class="page1_class1" id="page1_id1" style="background:none;border:2px solid gray;border-radius: 20px;width: 250px;padding-top: 10px;padding-bottom: 20px;padding-left: 20px;padding-right: 20px;">
        <h1>Login Form</h1>
        <br>
        <input type="text" id="username" placeholder="Username" style="border-top: none;border-right: none;border-left: none;outline: none; text-align: center;font-size:0.9em ;width: 50%;font-weight:bold;" /><br>
        <br>
        <input type="password" id="password" placeholder="Password" style="border-top: none;border-right: none;border-left: none;outline: none; text-align: center;font-size:0.9em ;width: 50%;font-weight:bold;" />
        <br><span id="errorMessage" style="color: red"></span><br>
        <input type="submit" value="Login" onclick="LoginUser()" style="float: right;padding-top: 1px;padding-bottom: 1px;padding-left: 10px;padding-right: 10px;font-size: 0.9em;font-weight:bold;" /><br>
        <br>
        <b>If you don't have an account,</b><input type="button" onClick="function1()" value="Create New" style="margin-top: 5px;font-weight:bold;" />
      </div>

      <!--page2-->
      <div class="page2_class1" id="page2_id1" style="background:none;border:2px solid gray;border-radius: 20px;width: 250px;padding-top: 10px;padding-bottom: 20px;padding-left: 20px;padding-right: 20px;">
        <h1>Create Account</h1>
        <input type="text" id="usernamee" placeholder="Name" style="border-top: none;border-right: none;border-left: none;outline: none; text-align: center;font-size:0.9em ;width: 50%;font-weight:bold;" /><br>
        <br>
        <input type="password" id="passwordd" placeholder="Create password" style="border-top: none;border-right: none;border-left: none;outline: none; text-align: center;font-size: 0.9;width: 50%;font-weight:bold;" /><br>
        <br>
        <input type="text" id="email" placeholder="Email" style="border-top: none;border-right: none;border-left: none;outline: none; text-align: center;font-size:0.9em ;width: 50%;font-weight:bold;" /><br>
        <br>
        <input type="number" id="phone" placeholder="Phone no." style="border-top: none;border-right: none;border-left: none;outline: none; text-align: center;font-size:0.9em ;width: 50%;font-weight:bold;" /><br><br>
        <b style="color:red;">Password must contain letters and numbers. It will not work without letters and numbers.</b><br><br>
        <input type="submit" value="Create" onclick="AddRow()" style="float: right;padding-top: 1px;padding-bottom: 1px;padding-left: 10px;padding-right: 10px;font-size: 0.9em;font-weight:bold;" />
        <br>
      </div>

      <!--page3-->
      <div class="page3_class1" id="page3_id1" style="background:none;border:2px solid gray;border-radius: 20px;width: 250px;padding-top: 10px;padding-bottom: 20px;padding-left: 20px;padding-right: 20px;">
        <center>
          <h2> Your account has been successfully created. Login to your account</h2>
          <input type="submit" onClick="function3()" value="Login" style="font-weight:bold;"><br>
        </center>
      </div>

      <!--page4-->
      <div class="page4_class1" id="page4_id1" style="background:none;border:2px solid gray;border-radius: 20px;width: 250px;padding-top: 10px;padding-bottom: 20px;padding-left: 20px;padding-right: 20px;">
        <center>
          <br>
          <h2>Hi <b id="displayusername" style="color:red;"></b>!</h2>
          <div class="user"></div>
          <h2> You are successfully logged in.</h2>
          <h2>**************</h2>
          <br>
        </center>
      </div>
    </center>
  </body>
</html>


В коді немає перевірок на валідність ні пароля ні в плані електронної пошти як запевняє текст перед реєстрацією на сторінці :))

коли ви все підготували то треба зробити розгортання(введення в дію) як веб додаток. Гугл буде писати що це небеспечно, треба погодитися після того як все вийде можете скопіювати посилання на веб додаток і вставити цей урл в адресний рядок браузер та натиснути ентер) і маєте отримати те саме що і за посиланням на початку довгочита.


Сподіваюся це допоможе для втілення ваших ідей. Наступним довгочитом буде форма реєстрації з записом в гугл таблицю з валідацієй данних полів та обмін даними з форми веб сайту.

Статті про вітчизняний бізнес та цікавих людей:

  • CRM keyCRM: зручне рішення для продажів, комунікацій і керування командою

    Успіх компанії залежить від того, наскільки швидко вона здатна опрацьовувати вхідні запити. Коли дані про клієнтів розпорошені між різними месенджерами, виникає хаос. CRM keyCRM пропонує вихід із цієї ситуації, об’єднуючи всі робочі процеси в єдиному зручному інтерфейсі.

    Теми цього довгочиту:

    Crm
  • Різниця між UX і UI, яку варто зрозуміти ще до першого заняття

    Більшість людей, які обирають професію UX чи UI, довго вважають це одним і тим самим. Насправді це два різних підходи до роботи над продуктом, і плутанина між ними гальмує розвиток ще на старті.

    Теми цього довгочиту:

    Ui-ux
  • Логіка змін: як SEO оптимізація прибирає бар’єри до зростання

    Багато компаній приходять у SEO з очікуванням швидкого ривка, але дійсний ефект починається там, де сайт перестають латати точково. Тому в центрі роботи стоїть не окрема дія, а послідовні зміни. Оптимізація сайту має прибирати системні перешкоди, а не маскувати їх новими текстами

    Теми цього довгочиту:

    Seo
  • Музичний футуризм: неймовірні інструменти XXI століття

    Еволюція музичних інструментів це один із найкрутіших проявів потужності людської уяви і потреби виразити себе через мистецтво. І хоча багато традиційних інструментів майже не змінилися за століття існування, інновації і пошук не зупиняються.

    Теми цього довгочиту:

    Музичні Інструменти
  • Стіл – всьому голова? Так, якщо його правильно підібрати

    Коли починаєш вивчати пропозицію меблевих фабрик щодо столів, дивуєшся кількості варіантів, адже вони пропонують різні розміри, різні матеріали, різноманітні форми та дизайни. Скористайтесь нашим каталогом MebelOK, щоб Ви могли підібрати найкращу модель для Вашого приміщення

    Теми цього довгочиту:

    Столи
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Floksi Pet
Floksi Pet@Floksipet

Сфінкси + программування :D

10Довгочити
924Перегляди
8Підписники
Підтримати
На Друкарні з 12 квітня 2024

Більше від автора

  • Як заміряти кота сфінкса для одягу: детальна інструкція

    Правильне вимірювання вашого кота сфінкса є ключовим для забезпечення комфортної посадки одягу. Ви можете купити одяг для котів сфінксів, який ідеально підійде за розміром. В статті наведено детальні інструкції та поради, які допоможуть вам точно зняти мірки з вашого улюбленця.

    Теми цього довгочиту:

    Одяг Для Котів
  • 3д модель в браузері

    Бібліотека за допомогою якої можете інтегрувати 3д модель, або створити її математично, створити частинки і анімацію до них, фізику і будь що інше. потужна і цікава штука яка не лишить байдужими будь кого.

    Теми цього довгочиту:

    3д Графіка

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: