Друкарня від 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>


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

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


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

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

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

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

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

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

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

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

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

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

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

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

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

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

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

854Прочитань
2Автори
8Читачі
Підтримати
На Друкарні з 12 квітня

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

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

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

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

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

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

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

    3д Графіка

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

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

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

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