Xudosiz autentifikatsiya ro'yxatga olish php

10/05/2015 Romchik

Xayrli kun. Ushbu maqolada foydalanuvchi ro'yxatini tahlil qilish uchun misoldan foydalanamiz. Keyin uning elektron pochta manzilini tasdiqlash orqali foydalanuvchini faollashtiring. Va nihoyat, foydalanuvchi avtorizatsiyasi . Lekin faqat faol foydalanuvchilarga ruxsat berilishi kerak.

Biz qiladigan birinchi narsa - nazoratchi va ro'yxatdan o'tish uchun ko'rinish yaratish.

Ro'yxatdan o'tish shaklini yaratish

Resurslar shablonlari bilan katalogga o'ting va unda auth pastki katalogini yarating. Endi auth papkasida quyidagi kod bilan register.blade.php faylini yaratamiz:

Ro‘yxatdan o‘tish

((--Xatolar--)) @if ($xatolar->has()) ×
    @foreach($errors->all() $xato sifatida)
  • ((( $xato )))
  • @endforeach
@endif (!! csrf_field() ! Email Пароль Повторите пароль Отправить !}

Yuqoridagi kodni tushuntirmayman, bu erda hamma narsa aniq.

App/Http/Controller/Auth/AuthController.php

Biz faqat AuthController.php tekshiruvi usullarini bekor qilamiz. Shunday qilib, ro'yxatdan o'tish shaklini ko'rsatish uchun getRegister usuli mavjud. Biz bu usulga tegmaymiz.

Endi marshrutlarga o'tamiz. Faylni oching:

Va bizning usulimizga yo'lni aniqlang:

Route::get("auth/register", "Auth\AuthController@getRegister");

Endi brauzerda dasturimizni ochamiz. Ajoyib, biz ro'yxatdan o'tish shaklini ko'ramiz.

Foydalanuvchi ro'yxatdan o'tish

Keling, darhol foydalanuvchini ro'yxatdan o'tkazish uchun marshrutni aniqlaylik. Keling, faylga o'tamiz:

App/Http/Controller/routes.php

Va quyidagi yo'nalishni qo'shing:

Route::post("auth/register", "Auth\AuthController@postRegister");

Endi foydalanuvchilarni saqlash uchun jadval tuzamiz. Bu jadval uchun migratsiya allaqachon mavjud, ammo u bizga mos kelmaydi. Keling, uni o'zgartiraylik. Keling, faylga o'tamiz:

Database/migrations/2014_10_12_create_users_table.php

Va kodni o'zgartiramiz:

Mening holimda bu shunday ko'rinadi:

bd.php ni saqlang.
Ajoyib! Bizda ma'lumotlar bazasida jadval va unga ulanish mavjud. Endi siz foydalanuvchilar o'z ma'lumotlarini qoldiradigan sahifani yaratishni boshlashingiz mumkin.

3. Tarkibiga ega reg.php faylini yarating (barcha izohlar ichidagi):



Ro‘yxatdan o‘tish


Ro‘yxatdan o‘tish


Sizning login:




Sizning parolingiz:








4. Ma'lumotlar bazasiga ma'lumotlarni kiritadigan va foydalanuvchini saqlaydigan fayl yarating. save_user.php (ichki sharhlar):

5. Endi bizning foydalanuvchilarimiz ro'yxatdan o'tishlari mumkin! Keyinchalik, allaqachon ro'yxatdan o'tgan foydalanuvchilar uchun saytga kirish uchun "eshik" yaratishingiz kerak. index.php (ichki sharhlar):




Bosh sahifa


Bosh sahifa


Sizning login:


Sizning parolingiz:






Roʻyxatdan oʻtish



OK, hammasi tugadi! Dars zerikarli bo'lishi mumkin, lekin juda foydali. Bu erda faqat ro'yxatdan o'tish g'oyasi ko'rsatilgan, keyin siz uni yaxshilashingiz mumkin: xavfsizlik, dizayn, ma'lumotlar maydonlarini qo'shing, avatarlarni yuklang, hisobingizdan chiqing (buni amalga oshirish uchun o'rnatilmagan funksiya bilan seansdagi o'zgaruvchilarni yo'q qilish kifoya) va hokazo. Omad!

Men hamma narsani tekshirdim, u to'g'ri ishlaydi!

Ushbu maqolada siz HTML, JavaScript, PHP va MySql-dan foydalangan holda ro'yxatdan o'tish va kirish formasini qanday yaratishni o'rganasiz. Bunday shakllar turidan qat'i nazar, deyarli har bir veb-saytda qo'llaniladi. Ular forum, onlayn-do'kon, ijtimoiy tarmoqlar (masalan, Facebook, Twitter, Odnoklassniki) va boshqa ko'plab turdagi saytlar uchun yaratilgan.

Agar sizning mahalliy kompyuteringizda veb-saytingiz bo'lsa, umid qilamanki, sizda allaqachon mahalliy server o'rnatilgan va ishlayapti. Busiz, hech narsa ishlamaydi.

Ma'lumotlar bazasida jadval yaratish

Foydalanuvchilarni ro'yxatga olishni amalga oshirish uchun, birinchi navbatda, ma'lumotlar bazasi kerak. Agar sizda allaqachon mavjud bo'lsa, unda ajoyib, aks holda siz uni yaratishingiz kerak. Maqolada men buni qanday qilishni batafsil tushuntiraman.

Shunday qilib, bizda ma'lumotlar bazasi (MB deb qisqartiriladi), endi biz jadval yaratishimiz kerak foydalanuvchilar unda biz ro'yxatdan o'tgan foydalanuvchilarimizni qo'shamiz.

Maqolada ma'lumotlar bazasida jadvalni qanday yaratishni ham tushuntirdim. Jadvalni yaratishdan oldin uning qanday maydonlarni o'z ichiga olishini aniqlashimiz kerak. Ushbu maydonlar ro'yxatdan o'tish shaklidagi maydonlarga mos keladi.

Shunday qilib, formamiz qanday maydonlarga ega bo'lishini o'yladik, tasavvur qildik va jadval yaratdik foydalanuvchilar ushbu maydonlar bilan:

  • id- Identifikator. Maydon id Ma'lumotlar bazasidagi har bir jadvalda u bo'lishi kerak.
  • ism- Ismni saqlash uchun.
  • familiya- Familiyani saqlab qolish uchun.
  • elektron pochta- Pochta manzilini saqlash uchun. Login sifatida biz elektron pochtadan foydalanamiz, shuning uchun bu maydon noyob bo'lishi kerak, ya'ni UNIQUE indeksiga ega bo'lishi kerak.
  • email_status- Pochtaning tasdiqlangan yoki tasdiqlanmaganligini ko'rsatadigan maydon. Agar pochta tasdiqlansa, u 1 qiymatiga ega bo'ladi, aks holda qiymat 0 bo'ladi.
  • parol- Parolni saqlash uchun.


Agar roʻyxatdan oʻtish formangizda boshqa maydonlar boʻlishini istasangiz, ularni shu yerga ham qoʻshishingiz mumkin.

Mana, bizning stolimiz foydalanuvchilar tayyor. Keling, keyingi bosqichga o'tamiz.

Ma'lumotlar bazasiga ulanish

Biz ma'lumotlar bazasini yaratdik, endi unga ulanishimiz kerak. PHP kengaytmasi MySQLi yordamida ulanamiz.

Saytimiz papkasida nomli fayl yarating dbconnect.php, va unga quyidagi skriptni yozing:

Bu fayl dbconnect.php shakl ishlov beruvchilariga ulanishi kerak bo'ladi.

O'zgaruvchiga e'tibor bering $address_site, bu erda men ishlayotgan test saytim nomini ko'rsatdim. Iltimos, saytingiz nomini mos ravishda ko'rsating.

Sayt tuzilishi

Endi saytimizning HTML tuzilishini ko'rib chiqamiz.

Biz saytning sarlavhasi va altbilgisini alohida fayllarga o'tkazamiz, header.php Va footer.php. Biz ularni barcha sahifalarga joylashtiramiz. Ya'ni asosiy sahifada (fayl index.php), ro'yxatdan o'tish shakli (fayl form_register.php) va avtorizatsiya shakli (fayl form_auth.php).

Bizning havolalarimiz bilan bloklash, ro'yxatdan o'tish Va ruxsat, barcha sahifalarda ko'rsatilishi uchun ularni sayt sarlavhasiga qo'shing. Bitta havola ro'yxatdan o'tish shakli bilan sahifaga kiradi (fayl form_register.php) va ikkinchisini avtorizatsiya shakli (fayl form_auth.php).

header.php faylining tarkibi:

Saytimiz nomi

Natijada bizning asosiy sahifamiz quyidagicha ko'rinadi:


Albatta, sizning saytingiz butunlay boshqacha tuzilishga ega bo'lishi mumkin, ammo bu biz uchun hozir muhim emas. Asosiysi, ro'yxatdan o'tish va avtorizatsiya qilish uchun havolalar (tugmalar) mavjud.

Endi ro'yxatdan o'tish shakliga o'tamiz. Siz allaqachon tushunganingizdek, bizda fayl mavjud form_register.php.

Ma'lumotlar bazasiga o'ting (phpMyAdmin-da), jadval tuzilishini oching foydalanuvchilar va bizga qaysi sohalar kerakligini ko'rib chiqing. Bu bizga ism va familiyani kiritish uchun maydonlar, pochta manzilini (elektron pochta) kiritish uchun maydon va parolni kiritish uchun maydon kerakligini anglatadi. Va xavfsizlik maqsadida biz captcha kiritish uchun maydon qo'shamiz.

Serverda ro'yxatdan o'tish shaklini qayta ishlash natijasida turli xil xatolar yuzaga kelishi mumkin, buning natijasida foydalanuvchi ro'yxatdan o'ta olmaydi. Shuning uchun, foydalanuvchi nima uchun ro'yxatdan o'tish muvaffaqiyatsiz tugashini tushunish uchun ushbu xatolar haqida xabarlarni ko'rsatish kerak.

Shaklni ko'rsatishdan oldin, sessiyadagi xato xabarlarini ko'rsatish uchun blok qo'shing.

Va yana bir narsa, agar foydalanuvchi allaqachon avtorizatsiya qilingan bo'lsa va u qiziquvchanligi sababli brauzerning manzil satriga yozish orqali to'g'ridan-to'g'ri ro'yxatdan o'tish sahifasiga kirsa. site_address/form_register.php, keyin bu holda, ro'yxatdan o'tish shakli o'rniga, biz allaqachon ro'yxatdan o'tganligini ko'rsatadigan sarlavhani ko'rsatamiz.

Umuman olganda, fayl kodi form_register.php biz buni oldik:

Siz allaqachon ro'yxatdan o'tgansiz

Brauzerda ro'yxatdan o'tish shakli bo'lgan sahifa quyidagicha ko'rinadi:


Kerakli atributdan foydalanib, biz barcha maydonlarni majburiy qilib qo'ydik.

Captcha ko'rsatilgan ro'yxatdan o'tish shaklining kodiga e'tibor bering:


Biz rasm uchun src atributining qiymatida faylga yo'lni ko'rsatdik captcha.php, bu captcha ni yaratadi.

Keling, fayl kodini ko'rib chiqaylik captcha.php:

Kod yaxshi sharhlangan, shuning uchun men faqat bir nuqtaga e'tibor qarataman.

Funktsiya ichida imageTtfText(), shriftga yo'l belgilanadi verdana.ttf. Shunday qilib, captcha to'g'ri ishlashi uchun biz papka yaratishimiz kerak shriftlar, va u yerga shrift faylini joylashtiring verdana.ttf. Siz uni Internetdan topishingiz va yuklab olishingiz yoki ushbu maqolaning materiallari bilan arxivdan olishingiz mumkin.

Biz HTML tuzilmasi bilan tugatdik, davom etish vaqti keldi.

JQuery yordamida elektron pochtaning haqiqiyligini tekshirish

Har qanday shakl mijoz tomonidan (JavaScript, jQuery yordamida) va server tomonida kiritilgan ma'lumotlarning haqiqiyligini tekshirishi kerak.

Elektron pochta maydoniga alohida e'tibor qaratishimiz kerak. Kiritilgan pochta manzili haqiqiy bo'lishi juda muhimdir.

Ushbu kiritish maydoni uchun biz elektron pochta turini o'rnatdik (type="email"), bu bizni noto'g'ri formatlardan biroz ogohlantiradi. Ammo bu etarli emas, chunki brauzer bizga taqdim etadigan kod inspektori orqali biz atribut qiymatini osongina o'zgartirishimiz mumkin turi Bilan elektron pochta yoqilgan matn, va bu, bizning chekimiz endi haqiqiy emas.


Va bu holda, biz yanada ishonchli tekshirishni amalga oshirishimiz kerak. Buning uchun JavaScript-dan jQuery kutubxonasidan foydalanamiz.

jQuery kutubxonasini ulash uchun faylda header.php teglar orasida , yopilish tegidan oldin , ushbu qatorni qo'shing:

Ushbu qatordan so'ng darhol elektron pochtani tekshirish kodini qo'shamiz. Bu erda biz kiritilgan parol uzunligini tekshirish uchun kod qo'shamiz. Uning uzunligi kamida 6 ta belgidan iborat bo'lishi kerak.

Ushbu skriptdan foydalanib, biz kiritilgan elektron pochta manzilining haqiqiyligini tekshiramiz. Agar foydalanuvchi noto'g'ri elektron pochta manzilini kiritgan bo'lsa, biz bu haqda xato xabarini ko'rsatamiz va ariza yuborish tugmasini o'chirib qo'yamiz. Agar hamma narsa yaxshi bo'lsa, biz xatoni olib tashlaymiz va ariza yuborish tugmasini faollashtiramiz.

Shunday qilib, biz mijoz tomonidan shaklni tekshirishni tugatdik. Endi biz uni serverga yuborishimiz mumkin, u erda biz bir nechta tekshiruvlarni qilamiz va ma'lumotlar bazasiga ma'lumotlarni qo'shamiz.

Foydalanuvchini ro'yxatdan o'tkazish

Shaklni qayta ishlash uchun faylga yuboramiz register.php, POST usuli orqali. Ushbu ishlov beruvchi faylining nomi atribut qiymatida ko'rsatilgan harakat. Va jo'natish usuli atribut qiymatida ko'rsatilgan usuli.

Ushbu faylni oching register.php va biz qilishimiz kerak bo'lgan birinchi narsa - seansni ishga tushirish funksiyasini yozish va avval yaratilgan faylni ulash dbconnect.php(Ushbu faylda biz ma'lumotlar bazasiga ulanishni amalga oshirdik). Va shuningdek, darhol hujayralarni e'lon qilaylik xato_xabarlar Va muvaffaqiyat_xabarlari global sessiya massivida. IN xato_xabarlar biz shaklni qayta ishlash jarayonida yuzaga keladigan barcha xato xabarlarni yozib olamiz va ichida muvaffaqiyatli_xabarlar, biz quvonchli xabarlarni yozib olamiz.

Davom etishdan oldin, forma umuman yuborilganligini tekshirishimiz kerak. Tajovuzkor atribut qiymatiga qarashi mumkin harakat shakldan o'ting va ushbu forma qaysi faylga ishlov berayotganini bilib oling. Va u brauzerning manzil satriga quyidagi manzilni kiritish orqali to'g'ridan-to'g'ri ushbu faylga o'tish fikriga ega bo'lishi mumkin: http://site_address/register.php

Shunday qilib, global POST massivida formadagi "Ro'yxatdan o'tish" tugmachamiz nomiga mos keladigan katakchani tekshirishimiz kerak. Shunday qilib, biz "Ro'yxatdan o'tish" tugmasi bosilganmi yoki yo'qligini tekshiramiz.

Agar tajovuzkor to'g'ridan-to'g'ri ushbu faylga o'tishga harakat qilsa, ular xato xabarini oladi. Eslatib oʻtamiz, $address_site oʻzgaruvchisi sayt nomini oʻz ichiga oladi va u faylda eʼlon qilingan. dbconnect.php.

Seansdagi captcha qiymati faylda yaratilganda qo'shilgan captcha.php. Eslatib o'tamiz, men sizga fayldagi ushbu kod qismini yana ko'rsataman captcha.php, bu erda captcha qiymati sessiyaga qo'shiladi:

Endi tekshirishning o'ziga o'taylik. Fayl ichida register.php, if blokining ichida, biz "Ro'yxatdan o'tish" tugmasi bosilganligini yoki to'g'rirog'i " izoh " ko'rsatilganligini tekshiramiz. // (1) Keyingi kod qismi uchun bo'sh joy"Biz yozamiz:

//Qabul qilingan captcha-ni tekshiring //Qatorning boshidan va oxiridan bo'shliqlarni kesib oling $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //Qabul qilingan qiymatni sessiya qiymati bilan solishtiring. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // Agar captcha noto'g'ri bo'lsa, biz foydalanuvchini ro'yxatdan o'tish sahifasiga qaytaramiz va u erda u noto'g'ri captcha kiritganligi haqida xato xabarini ko'rsatamiz. $error_message = "

Xato! Siz noto'g'ri captcha kiritdingiz

"; // Xato xabarini seansga saqlang. $_SESSION["error_messages"] = $error_message; // Foydalanuvchini ro'yxatdan o'tish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy ko'chirildi"); header("Joylashuv: " .$address_site ."/form_register.php"); //Skriptdan chiqishni to'xtating(); ) // (2) Keyingi kod qismi uchun joylashtiring )else( //Agar captcha o'tkazilmagan bo'lsa yoki u bo'sh bo'lsa chiqish ("

Xato! Tasdiqlash kodi, ya'ni captcha kodi yo'q. Siz asosiy sahifaga o'tishingiz mumkin.

"); }

Keyinchalik, POST massividan olingan ma'lumotlarni qayta ishlashimiz kerak. Avvalo, biz global POST massivining mazmunini tekshirishimiz kerak, ya'ni u erda nomlari bizning formamizdagi kiritish maydonlarining nomlariga mos keladigan hujayralar mavjudligini tekshirishimiz kerak.

Agar hujayra mavjud bo'lsa, biz ushbu katakdagi satrning boshidan va oxiridan bo'sh joylarni kesib tashlaymiz, aks holda biz foydalanuvchini ro'yxatdan o'tish shakli bilan sahifaga qayta yo'naltiramiz.

Keyinchalik, bo'shliqlarni qisqartirganimizdan so'ng, biz o'zgaruvchiga qatorni qo'shamiz va bu o'zgaruvchining bo'shligini tekshiramiz; agar u bo'sh bo'lmasa, biz davom etamiz, aks holda biz foydalanuvchini ro'yxatdan o'tish shakli bilan sahifaga qayta yo'naltiramiz.

Ushbu kodni belgilangan joyga qo'ying" // (2) Keyingi kod qismi uchun bo'sh joy".

/* $_POST global massivida formadan yuborilgan ma’lumotlar mavjudligini tekshiring va yuborilgan ma’lumotlarni oddiy o‘zgaruvchilarga o‘rang.*/ if(isset($_POST["first_name"]))( //Bo‘shliqlarni boshidan qisqartiring. va satr oxiri $first_name = trim($_POST["first_name"]); //O'zgaruvchining bo'shligini tekshiring if(!empty($first_name))( // Xavfsizlik uchun maxsus belgilarni HTML ob'ektlariga aylantiring $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // Xato xabarini seansga saqlang. $_SESSION["error_messages"] .= "

Ismingizni kiriting

Nom maydoni yetishmayapti

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); ) if( isset($_POST["familiya_ism"]))( //Satr boshidan va oxiridan bo'shliqlarni kesib oling $last_name = trim($_POST["familiya_ism"]); if(!empty($last_name)) ( // Xavfsizlik uchun maxsus belgilarni HTML ob'ektlariga aylantiring $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // Xato xabarini sessiyaga saqlang. $_SESSION["error_messages"] .= "

Iltimos, familiyangizni kiriting

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); ) )else ( // Xato xabarini seansga saqlang. $_SESSION["error_messages"] .= "

Familiya maydoni yo‘q

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); ) if( isset($_POST["email"]))( //Satr boshidan va oxiridan bo'sh joylarni kesish $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) Elektron pochta manzili formatini va uning oʻziga xosligini tekshirish uchun kod joylashuvi )alse( // Xato xabarini sessiyaga saqlang. $_SESSION["error_messages"] .= "

Elektron pochtangizni kiriting

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); ) )else ( // Xato xabarini seansga saqlang. $_SESSION["error_messages"] .= "

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); ) if( isset($_POST["password"]))( //String boshidan va oxiridan bo'shliqlarni kesib tashlang $password = trim($_POST["password"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //Parolni shifrlang $password = md5($password."top_secret"); )else( // Xato xabarini sessiyaga saqlang. $_SESSION["error_messages"] .= "

Parolingizni kiriting

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); ) )else ( // Xato xabarini seansga saqlang. $_SESSION["error_messages"] .= "

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); ) // (4) Ma'lumotlar bazasiga foydalanuvchi qo'shish uchun kodni joylashtiring

Bu soha alohida ahamiyatga ega elektron pochta. Qabul qilingan pochta manzilining formatini va uning ma'lumotlar bazasida o'ziga xosligini tekshirishimiz kerak. Ya'ni, allaqachon ro'yxatdan o'tgan bir xil elektron pochta manziliga ega foydalanuvchi bormi?

Belgilangan joyda" // (3) Pochta manzili formatini va uning o'ziga xosligini tekshirish uchun kod joylashuvi"quyidagi kodni qo'shing:

//Qabul qilingan elektron pochta manzilining formatini oddiy ifoda yordamida tekshiring $reg_email = "/^**@(+(*+)*\.)++/i"; //Agar qabul qilingan elektron pochta manzilining formati oddiy ifodaga mos kelmasa if(!preg_match($reg_email, $email))( // Xato xabarini sessiyaga saqlang. $_SESSION["error_messages"] .= "

Siz noto'g'ri elektron pochta manzilini kiritdingiz

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); ) // Biz ma'lumotlar bazasida bunday manzil mavjudligini tekshiramiz. $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email.""); / /Agar qabul qilinganlar soni aynan bitta qator boʻlsa, demak, ushbu elektron pochta manziliga ega foydalanuvchi allaqachon roʻyxatdan oʻtgan if($result_query->num_rows == 1)( //Agar natija notoʻgʻri boʻlsa if(($row =) $result_query->fetch_assoc()) != false) ( // Xato xabarini seansga saqlang. $_SESSION["error_messages"] .= "

Ushbu elektron pochta manziliga ega foydalanuvchi allaqachon ro'yxatdan o'tgan

"; //Foydalanuvchini roʻyxatdan oʻtish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); )else( // Xato xabarini saqlang sessiyaga. $_SESSION["error_messages"] .= "

Ma'lumotlar bazasi so'rovida xato

"; //Foydalanuvchini ro'yxatdan o'tish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy ko'chirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); ) /* tanlovni yopish */ $ result_query-> close(); //Skriptdan chiqishni toʻxtating(); ) /* tanlovni yopish */ $result_query->close();

Shunday qilib, biz barcha tekshiruvlarni tugatdik, foydalanuvchini ma'lumotlar bazasiga qo'shish vaqti keldi. Belgilangan joyda" // (4) Ma'lumotlar bazasiga foydalanuvchi qo'shish uchun kodni joylashtiring"quyidagi kodni qo'shing:

//Foydalanuvchini ma'lumotlar bazasiga qo'shish uchun so'rov $result_query_insert = $mysqli->query("INSERT INTO `foydalanuvchilar' (familiya, familiya, email, parol) VALUES ("".$first_name."", "".$last_name ." ", "".$elektron pochta.", "".$parol."")"); if(!$result_query_insert)( // Xato xabarini seansga saqlang. $_SESSION["error_messages"] .= "

Maʼlumotlar bazasiga foydalanuvchi qoʻshish soʻrovida xato

"; //Foydalanuvchini roʻyxatga olish sahifasi sarlavhasiga qaytaring("HTTP/1.1 301 Doimiy koʻchirildi"); header("Joylashuv: ".$adres_sayt."/form_register.php"); //Skriptdan chiqishni toʻxtating(); )else( $_SESSION["success_messages"] = "

Ro'yxatdan o'tish muvaffaqiyatli yakunlandi!!!
Endi siz foydalanuvchi nomi va parolingizdan foydalanib tizimga kirishingiz mumkin.

"; //Foydalanuvchini avtorizatsiya sahifasi sarlavhasiga yuboring("HTTP/1.1 301 Doimiy ko'chirildi"); header("Joylashuv: ".$adres_sayt."/form_auth.php"); ) /* So'rovni bajarish */ $ result_query_insert-> close(); //ma'lumotlar bazasiga ulanishni yopish $mysqli->close();

Agar foydalanuvchini ma'lumotlar bazasiga qo'shish so'rovida xatolik yuz bergan bo'lsa, biz ushbu xato haqida sessiyaga xabar qo'shamiz va foydalanuvchini ro'yxatdan o'tish sahifasiga qaytaramiz.

Aks holda, agar hamma narsa yaxshi bo'lsa, biz ham sessiyaga xabar qo'shamiz, lekin bu safar bu yanada yoqimli, ya'ni foydalanuvchiga ro'yxatdan o'tish muvaffaqiyatli bo'lganligini aytamiz. Va biz uni avtorizatsiya shakli bilan sahifaga yo'naltiramiz.

Elektron pochta manzili formati va parol uzunligini tekshirish uchun skript faylda mavjud header.php, shuning uchun u ushbu shakldagi maydonlarga ham tegishli bo'ladi.

Seans ham faylda boshlanadi header.php, shuning uchun faylda form_auth.php Seansni boshlashning hojati yo'q, chunki biz xatoga yo'l qo'yamiz.


Aytganimdek, elektron pochta manzili formati va parol uzunligini tekshirish uchun skript ham bu erda ishlaydi. Shuning uchun, agar foydalanuvchi noto'g'ri elektron pochta manzilini yoki qisqa parolni kiritsa, u darhol xato xabarini oladi. Bir tugma kirish harakatsiz holga keladi.

Xatolarni tuzatgandan so'ng, tugma kirish faollashadi va foydalanuvchi shaklni serverga yuborishi mumkin bo'ladi va u erda qayta ishlanadi.

Foydalanuvchi avtorizatsiyasi

Atribut qiymati uchun harakat avtorizatsiya nogironligida ko'rsatilgan fayl mavjud auth.php, bu shakl ushbu faylda qayta ishlanishini bildiradi.

Shunday qilib, faylni oching auth.php va avtorizatsiya formasini qayta ishlash uchun kod yozing. Siz qilishingiz kerak bo'lgan birinchi narsa - seansni boshlash va faylni ulash dbconnect.php ma'lumotlar bazasiga ulanish uchun.

Saytdan chiqish havolasini bosganingizda, biz faylga o'tamiz logout.php, bu erda biz oddiygina seansdan elektron pochta manzili va parol bilan hujayralarni yo'q qilamiz. Shundan so'ng, biz foydalanuvchini havola bosilgan sahifaga qaytaramiz Chiqish.

Fayl kodi logout.php:

Ana xolos. Endi siz o'zingizning veb-saytingizda foydalanuvchini ro'yxatdan o'tkazish va avtorizatsiya shakllarini qanday amalga oshirish va qayta ishlashni bilasiz. Ushbu shakllar deyarli har bir veb-saytda mavjud, shuning uchun har bir dasturchi ularni qanday yaratishni bilishi kerak.

Shuningdek, biz kiritilgan ma'lumotlarni mijoz tomonida (brauzerda, JavaScript, jQuery yordamida) va server tomonida (PHP yordamida) qanday tekshirishni o'rgandik. Shuningdek, biz saytni tark etish tartibini qanday amalga oshirishni bilib oldik.

Barcha skriptlar sinovdan o'tgan va ishlamoqda. Ushbu kichik saytning fayllari bilan arxivni ushbu havoladan yuklab olishingiz mumkin.

Kelajakda men tasvirlaydigan maqola yozaman. Va men ham tushuntirib beradigan maqola yozishni rejalashtirmoqdaman (sahifani qayta yuklamasdan). Shunday qilib, yangi maqolalar chiqishi haqida xabardor bo'lish uchun siz mening veb-saytimga obuna bo'lishingiz mumkin.

Agar sizda biron bir savol bo'lsa, iltimos, men bilan bog'laning va agar siz maqolada biron bir xatolikni sezsangiz, menga xabar bering.

Dars rejasi (5-qism):

  • Avtorizatsiya shakli uchun HTML strukturasini yaratish
  • Qabul qilingan ma'lumotlarni qayta ishlaymiz
  • Biz sayt sarlavhasida foydalanuvchi salomini ko'rsatamiz
  • Sizga maqola yoqdimi?

    Saytda oddiy foydalanuvchi autentifikatsiyasini qanday qilishni o'rganamiz. Saytda faqat avtorizatsiya qilingan foydalanuvchilar uchun sahifalar bo'lishi mumkin va agar biz ularga autentifikatsiya blokimizni qo'shsak, ular to'liq ishlaydi. Uni yaratish uchun sizga MySQL ma'lumotlar bazasi kerak bo'ladi. Agar foydalanuvchilar haqida ma'lumot qo'shmoqchi bo'lsangiz, u 5 ta ustunga (minimal) yoki undan ko'p bo'lishi mumkin. Keling, ma'lumotlar bazasini "Userauth" deb ataymiz.

    Unda quyidagi maydonlarni yaratamiz: foydalanuvchilar sonini hisoblash uchun ID, foydalanuvchining noyob identifikatsiya raqami uchun UID, foydalanuvchi nomi uchun foydalanuvchi nomi, elektron pochta manzili uchun Email va parol uchun parol. Mavjud ma'lumotlar bazasidan foydalanuvchini avtorizatsiya qilish uchun foydalanishingiz mumkin, xuddi yangi ma'lumotlar bazasida bo'lgani kabi, unda quyidagi jadvalni yarating.

    MySQL kodi

    JADVAL YARATISH `foydalanuvchilar` (`ID` int (11) NULL EMAS AUTO_INCREMENT, `UID` int (11) NULL EMAS, `Foydalanuvchi nomi` matni NULL EMAS, `Email` matni NULL EMAS, `Parol` matni NULL EMAS, ASOSIY KALIT (`ID`)) ENGINE=MyISAM SUVGA CHARSET=utf8 AUTO_INCREMENT=1 ;

    Endi “sql.php” faylini yaratamiz. U ma'lumotlar bazasiga ulanish uchun javobgardir. Bu kod, birinchidan, serverga ulanganda server va foydalanuvchi uchun o'zgaruvchilar yaratadi. Ikkinchidan, u ma'lumotlar bazasini tanlaydi, bu holda "USERAUTH". Ushbu fayl ma'lumotlar bazasiga kirish uchun "log.php" va "reg.php" ichiga kiritilishi kerak.

    PHP kodi

    Keyingi kirish sahifasi, u "login.php" deb nomlansin. Birinchidan, kiritilgan ma'lumotlarni xatolar uchun tekshiradi. Sahifada foydalanuvchi nomi, parol, yuborish tugmasi va ro'yxatdan o'tish havolasi uchun maydonlar mavjud. Foydalanuvchi "Kirish" tugmasini bosganida, forma "log.php" faylidagi kod bilan qayta ishlanadi va keyin tizimga kiradi.

    PHP kodi

    Kirish shakli

    Foydalanuvchi nomi
    Parol
    Ro‘yxatdan o‘tish

    Keyin tizimga kirish uchun skript yozamiz. Keling, uni "log.php" deb ataymiz. U skriptingizni buzishi mumkin bo'lgan SQL in'ektsiyalaridan kirish ma'lumotlarini tozalash funktsiyasiga ega. Ikkinchidan, u shakl ma'lumotlarini oladi va ularning to'g'riligini tekshiradi. Agar kiritilgan ma'lumotlar to'g'ri bo'lsa, skript foydalanuvchini vakolatli foydalanuvchilar sahifasiga yuboradi, agar bo'lmasa, xatolarni o'rnatadi va foydalanuvchini kirish sahifasiga yuboradi.

    PHP kodi

    Keling, ro'yxatdan o'tish sahifasini yarataylik, uni "register.php" deb nomlang. U kirish sahifasiga o'xshaydi, faqat unda yana bir nechta maydonlar mavjud va ro'yxatdan o'tish havolasi o'rniga, agar foydalanuvchida allaqachon hisob qaydnomasi bo'lsa, login.php ga havola mavjud.

    PHP kodi

    Ro'yxatdan o'tish shakli

    Foydalanuvchi nomi
    Elektron pochta
    Parol
    Parolni qayta kiriting
    Mening hisobim bor

    Endi biz "reg.php" faylida ro'yxatga olish skriptini yaratamiz. U ma'lumotlar bazasiga ulanish uchun "sql.php" ni o'z ichiga oladi. Xuddi shu funktsiya kirish maydonini tozalash uchun kirish skriptidagi kabi ishlatiladi. O'zgaruvchilar mumkin bo'lgan xatolar uchun o'rnatiladi. Keyingi - bu hech qachon taqdim etilmagan noyob identifikatorni yaratish funktsiyasi. Keyin ro'yxatga olish formasidan ma'lumotlar olinadi va tekshiriladi. Elektron pochta manzili to'g'ri formatda ekanligi va parol qayta to'g'ri kiritilganligini tekshirish uchun tekshiriladi. Keyin skript ma'lumotlar bazasida bir xil nomga ega foydalanuvchi mavjudligini tekshiradi va agar shunday bo'lsa, xato haqida xabar beradi. Nihoyat, kod foydalanuvchini ma'lumotlar bazasiga qo'shadi.

    PHP kodi

    Shuningdek, foydalanuvchini tizimdan chiqarish uchun skript yaratishingiz kerak. U berilgan noyob identifikator va nomga ega foydalanuvchi uchun sessiyani tugatadi va keyin foydalanuvchini kirish sahifasiga yo'naltiradi.

    PHP kodi

    Nihoyat, "auth.php" skripti sahifalarni faqat vakolatli foydalanuvchilar uchun ochiq qilish uchun ishlatilishi mumkin. U tizimga kirish ma'lumotlarini tekshiradi va agar ular to'g'ri bo'lsa, foydalanuvchiga sahifalarni ko'rib chiqishga imkon beradi, agar bo'lmasa, tizimga kirishni so'raydi. Bundan tashqari, kimdir seanslardan birini yaratish orqali saytni buzishga harakat qilsa, u umumiy holatda bo'lgani kabi to'xtatiladi.

    PHP kodi

    Yuqoridagi koddagi shartlardan biri - bu savolning mavzusi.

    Vakolatli foydalanuvchilar uchun sahifaga quyidagi kod kiritilishi kerak, u, masalan, "member.php" deb nomlanadi, lekin siznikini xohlagan narsangiz deb atash mumkin.

    PHP kodi

    Siz ushbu sahifaga kirish huquqiga egasiz. Tashqariga chiqish ( )

    Foydalanuvchi autentifikatsiyasi tayyor!

    Oxirgi marta 2018-yil 5-aprelda Vinsi tomonidan o‘zgartirilgan.

    Foydalanuvchiga kirish va ro'yxatdan o'tish har qanday CMS ilovalari uchun asosiy talabdir. Bu loyihani boshlashdagi dastlabki ish. Foydalanuvchi login autentifikatsiyasiga ega ilova anonim kirishni oldini olish orqali xavfsizlikni ta'minlaydi. Ilovamizda autentifikatsiyani yoqishning turli usullari mavjud, masalan OAuth loginni yoqish yoki Yagona tizimga kirish (SSO) va shunga o'xshash boshqa usullarni amalga oshirish. Oldingi o'quv qo'llanmada biz qanday amalga oshirishni va shuningdek, haqida ko'rib chiqdik.

    Ushbu misol ham kirish, ham ro'yxatdan o'tish funksiyalarini o'z ichiga oladi. Ro'yxatdan o'tgan a'zolarni saqlash uchun MySQL ma'lumotlar bazasidan foydalandim. Foydalanuvchini ro'yxatdan o'tkazish foydalanuvchidan ma'lumotlarni olish uchun kirishni o'z ichiga oladi. Ushbu shaklni topshirgandan so'ng, shakl ma'lumotlari PHP ga joylashtiriladi va ma'lumotlar bazasida saqlanadi. Ma'lumotlar bazasiga saqlashdan oldin foydalanuvchi paroli shifrlanadi. PHP kodiga joylashtirishdan oldin. Agar foydalanuvchi joriy hisob ma'lumotlari bilan tizimga kirgan bo'lsa, foydalanuvchi va unga keyingi davom etishiga ruxsat beriladi.

    Foydalanuvchi ro'yxatdan o'tish shakli

    Ushbu kod foydalanuvchiga ro'yxatdan o'tish shaklini ko'rsatish uchun mo'ljallangan. Foydalanuvchi o'z ma'lumotlari bilan shaklni yuborganida, foydalanuvchi kiritishini tekshirish uchun JavaScript funksiyasi chaqiriladi. Muvaffaqiyatli tekshiruvdan so'ng, PHP kodi ma'lumotlar bazasini kiritishni amalga oshirish uchun joylashtirilgan shakl ma'lumotlarini o'qiydi.