უღვთო ავტორიზაციის რეგისტრაცია php

10/05/2015 რომჩიკი

Კარგი დღე. ამ სტატიაში ჩვენ გამოვიყენებთ მაგალითს მომხმარებლის რეგისტრაციის გასაანალიზებლად. შემდეგ გაააქტიურეთ მომხმარებელი მისი ელ.ფოსტის მისამართის დადასტურებით. და ბოლოს, მომხმარებლის ავტორიზაცია . მაგრამ მხოლოდ აქტიური მომხმარებლები უნდა იყვნენ ავტორიზებული.

პირველი, რასაც ჩვენ გავაკეთებთ, არის კონტროლერი და ხედის შექმნა რეგისტრაციისთვის.

სარეგისტრაციო ფორმის შექმნა

გადადით დირექტორიაში რესურსების შაბლონებით და შექმენით მასში ავტორიზაციის ქვედირექტორია. ახლა auth საქაღალდეში შევქმნით ფაილს register.blade.php შემდეგი კოდით:

რეგისტრაცია

((-- შეცდომები--)) @if ($errors->has()) ×
    @foreach($errors->all() როგორც $error)
  • ((($შეცდომა)))
  • @endforeach
@endif (!! csrf_field() ! Email Пароль Повторите пароль Отправить !}

მე არ განვმარტავ ზემოთ მოცემულ კოდს, აქ ყველაფერი ნათელია.

App/Http/Controllers/Auth/AuthController.php

ჩვენ უგულებელყოფთ მხოლოდ AuthController.php კონტროლერის მეთოდებს. ასე რომ, რეგისტრაციის ფორმის საჩვენებლად, არსებობს getRegister მეთოდი. ჩვენ არ ვეხებით ამ მეთოდს.

ახლა გადავიდეთ მარშრუტებზე. გახსენით ფაილი:

და განსაზღვრეთ ჩვენი მეთოდის მარშრუტი:

მარშრუტი::get("auth/register", "Auth\AuthController@getRegister");

ახლა მოდით გავხსნათ ჩვენი აპლიკაცია ბრაუზერში. კარგია, ჩვენ ვხედავთ რეგისტრაციის ფორმას.

მომხმარებლის რეგისტრაცია

მოდით დაუყოვნებლივ განვსაზღვროთ მომხმარებლის რეგისტრაციის მარშრუტი. გადავიდეთ ფაილზე:

App/Http/Controllers/routes.php

და დაამატეთ შემდეგი მარშრუტი:

მარშრუტი::post("auth/register", "Auth\AuthController@postRegister");

ახლა შევქმნათ ცხრილი მომხმარებლების შესანახად. ამ ცხრილისთვის უკვე არის მიგრაცია, მაგრამ ჩვენთვის არ არის შესაფერისი. მოდით შევცვალოთ. გადავიდეთ ფაილზე:

მონაცემთა ბაზა/migrations/2014_10_12_create_users_table.php

და შევცვალოთ კოდი:

ჩემს შემთხვევაში ასე გამოიყურება:

შეინახეთ bd.php.
დიდი! მონაცემთა ბაზაში გვაქვს ცხრილი და მასთან კავშირი. ახლა თქვენ შეგიძლიათ დაიწყოთ გვერდის შექმნა, რომელზეც მომხმარებლები დატოვებენ თავიანთ მონაცემებს.

3. შექმენით reg.php ფაილი შინაარსით (ყველა კომენტარი შიგნით):



რეგისტრაცია


რეგისტრაცია


თქვენი შესვლა:




Თქვენი პაროლი:








4. შექმენით ფაილი, რომელიც შეიტანს მონაცემებს მონაცემთა ბაზაში და შეინახავს მომხმარებელს. save_user.php (კომენტარები შიგნით):

5. ახლა ჩვენს მომხმარებლებს შეუძლიათ რეგისტრაცია! შემდეგი, თქვენ უნდა შექმნათ "კარი" უკვე დარეგისტრირებული მომხმარებლებისთვის საიტზე შესასვლელად. index.php (კომენტარები შიგნით):




მთავარი გვერდი


მთავარი გვერდი


თქვენი შესვლა:


Თქვენი პაროლი:






რეგისტრაცია



კარგი, ახლა ყველაფერი დასრულდა! გაკვეთილი შეიძლება იყოს მოსაწყენი, მაგრამ ძალიან სასარგებლო. აქ ნაჩვენებია მხოლოდ რეგისტრაციის იდეა, შემდეგ შეგიძლიათ გააუმჯობესოთ იგი: დაამატეთ უსაფრთხოება, დიზაინი, მონაცემთა ველები, ავატარების ჩატვირთვა, თქვენი ანგარიშიდან გასვლა (ამისთვის უბრალოდ გაანადგურეთ ცვლადები სესიიდან დაუყენებელი ფუნქციით) და ასე შემდეგ. Წარმატებები!

ყველაფერი შევამოწმე, მუშაობს გამართულად!

ამ სტატიაში თქვენ შეისწავლით როგორ შექმნათ რეგისტრაციისა და შესვლის ფორმა HTML, JavaScript, PHP და MySql გამოყენებით. ასეთი ფორმები გამოიყენება თითქმის ყველა ვებსაიტზე, მიუხედავად მისი ტიპისა. ისინი შექმნილია ფორუმისთვის, ონლაინ მაღაზიისთვის, სოციალური ქსელებისთვის (როგორიცაა Facebook, Twitter, Odnoklassniki) და მრავალი სხვა ტიპის საიტისთვის.

თუ თქვენ გაქვთ ვებსაიტი თქვენს ლოკალურ კომპიუტერზე, იმედი მაქვს, რომ თქვენ უკვე გაქვთ დაინსტალირებული და გაშვებული ლოკალური სერვერი. ამის გარეშე არაფერი გამოვა.

ცხრილის შექმნა მონაცემთა ბაზაში

მომხმარებლის რეგისტრაციის განსახორციელებლად, პირველ რიგში, ჩვენ გვჭირდება მონაცემთა ბაზა. თუ თქვენ უკვე გაქვთ, მაშინ შესანიშნავია, წინააღმდეგ შემთხვევაში, თქვენ უნდა შექმნათ იგი. სტატიაში მე დეტალურად განვმარტავ, თუ როგორ უნდა გავაკეთოთ ეს.

ასე რომ, ჩვენ გვაქვს მონაცემთა ბაზა (შემოკლებით DB), ახლა ჩვენ უნდა შევქმნათ ცხრილი მომხმარებლებირომელშიც ჩვენ დავამატებთ ჩვენს დარეგისტრირებულ მომხმარებლებს.

სტატიაში ასევე ავხსენი, თუ როგორ შევქმნათ ცხრილი მონაცემთა ბაზაში. ცხრილის შექმნამდე უნდა განვსაზღვროთ რა ველებს შეიცავს იგი. ეს ველები შეესაბამება სარეგისტრაციო ფორმის ველებს.

ასე რომ, დავფიქრდით, წარმოვიდგინეთ რა ველები ექნებოდა ჩვენს ფორმას და შევქმენით ცხრილი მომხმარებლებიამ ველებით:

  • id- იდენტიფიკატორი. ველი idმონაცემთა ბაზის ყველა ცხრილს უნდა ჰქონდეს იგი.
  • სახელი- სახელის გადასარჩენად.
  • გვარი- გვარის შესანარჩუნებლად.
  • ელ- საფოსტო მისამართის შესანახად. ჩვენ გამოვიყენებთ ელ. ფოსტას, როგორც შესვლას, ამიტომ ეს ველი უნდა იყოს უნიკალური, ანუ ჰქონდეს UNIQUE ინდექსი.
  • ელფოსტის_სტატუსს- ველი მიუთითებს ფოსტა დადასტურებულია თუ არა. თუ ფოსტა დადასტურებულია, მაშინ მას ექნება მნიშვნელობა 1, წინააღმდეგ შემთხვევაში მნიშვნელობა არის 0.
  • პაროლი- პაროლის შესანახად.


თუ გსურთ, რომ თქვენს სარეგისტრაციო ფორმას ჰქონდეს სხვა ველები, ასევე შეგიძლიათ დაამატოთ ისინი აქ.

ესე იგი, ჩვენი მაგიდა მომხმარებლებიმზადაა. გადავიდეთ შემდეგ ეტაპზე.

მონაცემთა ბაზის კავშირი

ჩვენ შევქმენით მონაცემთა ბაზა, ახლა ჩვენ უნდა დავუკავშირდეთ მას. ჩვენ დავუკავშირდებით PHP გაფართოების MySQLi-ს გამოყენებით.

ჩვენი საიტის საქაღალდეში შექმენით ფაილი სახელით dbconnect.phpდა ჩაწერეთ მასში შემდეგი სკრიპტი:

ეს ფაილი dbconnect.phpუნდა იყოს დაკავშირებული ფორმის დამმუშავებლებთან.

დააკვირდით ცვლადს $address_site, აქ მე მივუთითე ჩემი სატესტო საიტის სახელი, რომელზეც ვიმუშავებ. გთხოვთ მიუთითოთ თქვენი საიტის დასახელება შესაბამისად.

საიტის სტრუქტურა

ახლა მოდით შევხედოთ ჩვენი საიტის HTML სტრუქტურას.

ჩვენ გადავიტანთ საიტის სათაურს და ქვედა ნაწილს ცალკეულ ფაილებში, header.phpდა ძირი.php. ჩვენ მათ ყველა გვერდზე შევიტანთ. კერძოდ მთავარ გვერდზე (ფაილი index.php), სარეგისტრაციო ფორმის მქონე გვერდზე (ფაილი form_register.php) და ავტორიზაციის ფორმის მქონე გვერდზე (ფაილი form_auth.php).

დაბლოკეთ ჩვენი ბმულებით, რეგისტრაციადა ავტორიზაცია, დაამატეთ ისინი საიტის სათაურში ისე, რომ ისინი ყველა გვერდზე იყოს ნაჩვენები. ერთი ბმული შევა სარეგისტრაციო ფორმის გვერდზე (ფაილი form_register.php) და მეორე გვერდზე ავტორიზაციის ფორმის (ფაილი form_auth.php).

header.php ფაილის შიგთავსი:

ჩვენი საიტის სახელი

შედეგად, ჩვენი მთავარი გვერდი ასე გამოიყურება:


რა თქმა უნდა, თქვენს საიტს შეიძლება ჰქონდეს სრულიად განსხვავებული სტრუქტურა, მაგრამ ეს ჩვენთვის ახლა არ არის მნიშვნელოვანი. მთავარი ის არის, რომ არსებობს ბმულები (ღილაკები) რეგისტრაციისა და ავტორიზაციისთვის.

ახლა გადავიდეთ რეგისტრაციის ფორმაზე. როგორც უკვე გესმით, ჩვენ გვაქვს ფაილში form_register.php.

გადადით მონაცემთა ბაზაში (phpMyAdmin-ში), გახსენით ცხრილის სტრუქტურა მომხმარებლებიდა ნახეთ რა სფეროები გვჭირდება. ეს ნიშნავს, რომ ჩვენ გვჭირდება ველები სახელისა და გვარის შესაყვანად, ველი საფოსტო მისამართის (ელ. ფოსტა) და პაროლის შესაყვანად. და უსაფრთხოების მიზნით, ჩვენ დავამატებთ ველს captcha-ს შესაყვანად.

სერვერზე, სარეგისტრაციო ფორმის დამუშავების შედეგად, შეიძლება მოხდეს სხვადასხვა შეცდომები, რის გამოც მომხმარებელი ვერ დარეგისტრირდება. ამიტომ, იმისათვის, რომ მომხმარებელმა გაიგოს, რატომ ვერ ხერხდება რეგისტრაცია, აუცილებელია ამ შეცდომების შესახებ შეტყობინებების ჩვენება.

ფორმის ჩვენებამდე დაამატეთ ბლოკი სესიიდან შეცდომის შეტყობინებების საჩვენებლად.

და კიდევ ერთი, თუ მომხმარებელი უკვე ავტორიზებულია და ცნობისმოყვარეობის გამო, ბრაუზერის მისამართების ზოლში ჩაწერით პირდაპირ გადადის რეგისტრაციის გვერდზე. site_address/form_register.php, მაშინ ამ შემთხვევაში სარეგისტრაციო ფორმის ნაცვლად გამოვაჩენთ სათაურს, რომ ის უკვე რეგისტრირებულია.

ზოგადად, ფაილის კოდი form_register.phpჩვენ ეს შეგვიძლია:

თქვენ უკვე დარეგისტრირებული ხართ

ბრაუზერში რეგისტრაციის ფორმის გვერდი ასე გამოიყურება:


საჭირო ატრიბუტის გამოყენებით ჩვენ ყველა ველი სავალდებულო გავხადეთ.

ყურადღება მიაქციეთ სარეგისტრაციო ფორმის კოდს, სადაც ნაჩვენებია captcha:


ჩვენ დავაზუსტეთ ფაილის გზა გამოსახულების src ატრიბუტის მნიშვნელობაში captcha.php, რომელიც ქმნის ამ captcha-ს.

მოდით შევხედოთ ფაილის კოდს captcha.php:

კოდი კარგად არის კომენტირებული, ამიტომ მხოლოდ ერთ წერტილზე გავამახვილებ ყურადღებას.

ფუნქციის შიგნით imageTtfText(), მითითებულია შრიფტისკენ მიმავალი გზა ვერდანა.ტტფ. ასე რომ, რომ captcha-მ სწორად იმუშაოს, ჩვენ უნდა შევქმნათ საქაღალდე შრიფტებიდა განათავსეთ შრიფტის ფაილი იქ ვერდანა.ტტფ. შეგიძლიათ იპოვოთ და გადმოწეროთ ინტერნეტიდან, ან წაიღოთ არქივიდან ამ სტატიის მასალებით.

ჩვენ დავასრულეთ HTML სტრუქტურა, დროა გადავიდეთ.

ელ.ფოსტის მოქმედების შემოწმება jQuery-ის გამოყენებით

ნებისმიერ ფორმას სჭირდება შეყვანილი მონაცემების ვალიდობის შემოწმება, როგორც კლიენტის მხარეს ( JavaScript, jQuery-ის გამოყენებით), ასევე სერვერის მხარეს.

განსაკუთრებული ყურადღება უნდა მივაქციოთ ელფოსტის ველს. ძალიან მნიშვნელოვანია, რომ შეყვანილი საფოსტო მისამართი მოქმედებს.

ამ შეყვანის ველისთვის ჩვენ დავაყენეთ ელ.ფოსტის ტიპი (type="email"), ეს ოდნავ გვაფრთხილებს არასწორი ფორმატების შესახებ. მაგრამ ეს საკმარისი არ არის, რადგან კოდის ინსპექტორის საშუალებით, რომელსაც ბრაუზერი გვაწვდის, ჩვენ მარტივად შეგვიძლია შევცვალოთ ატრიბუტის მნიშვნელობა ტიპითან ელ on ტექსტიდა ეს არის ის, ჩვენი ჩეკი აღარ იქნება ძალაში.


და ამ შემთხვევაში, ჩვენ უნდა გავაკეთოთ უფრო საიმედო შემოწმება. ამისათვის ჩვენ გამოვიყენებთ jQuery ბიბლიოთეკას JavaScript-დან.

jQuery ბიბლიოთეკის დასაკავშირებლად, ფაილში header.phpტეგებს შორის , დახურვის ტეგამდე , დაამატეთ ეს ხაზი:

ამ ხაზის შემდეგ, ჩვენ დავამატებთ ელ.ფოსტის დადასტურების კოდს. აქ დავამატებთ კოდს შეყვანილი პაროლის სიგრძის შესამოწმებლად. მისი სიგრძე უნდა იყოს მინიმუმ 6 სიმბოლო.

ამ სკრიპტის გამოყენებით, ჩვენ ვამოწმებთ შეყვანილ ელ.ფოსტის მისამართს მოქმედებისთვის. თუ მომხმარებელმა შეიყვანა არასწორი ელფოსტა, ჩვენ ვაჩვენებთ შეცდომის შეტყობინებას ამის შესახებ და გამორთეთ ფორმის გაგზავნის ღილაკი. თუ ყველაფერი კარგადაა, მაშინ ჩვენ ვხსნით შეცდომას და ვააქტიურებთ ფორმის გაგზავნის ღილაკს.

ასე რომ, ჩვენ დავასრულეთ ფორმის ვალიდაცია კლიენტის მხარეს. ახლა ჩვენ შეგვიძლია გავაგზავნოთ ის სერვერზე, სადაც ასევე გავაკეთებთ რამდენიმე შემოწმებას და დავამატებთ მონაცემებს მონაცემთა ბაზაში.

Მომხმარებლის რეგისტრაცია

ფორმას ვაგზავნით ფაილში დასამუშავებლად რეგისტრაცია.php, POST მეთოდით. ამ დამმუშავებლის ფაილის სახელი მითითებულია ატრიბუტის მნიშვნელობაში მოქმედება. და გაგზავნის მეთოდი მითითებულია ატრიბუტის მნიშვნელობაში მეთოდი.

გახსენით ეს ფაილი რეგისტრაცია.phpდა პირველი, რაც უნდა გავაკეთოთ, არის დავწეროთ სესიის გაშვების ფუნქცია და დავაკავშიროთ ადრე შექმნილი ფაილი dbconnect.php(ამ ფაილში ჩვენ დავაკავშირეთ მონაცემთა ბაზა). და ასევე, მოდით დაუყოვნებლივ გამოვაცხადოთ უჯრედები შეცდომის_შეტყობინებებიდა წარმატების_შეტყობინებებიგლობალურ სესიების მასივში. IN შეცდომის_შეტყობინებებიჩვენ ჩავწერთ ყველა შეცდომის შეტყობინებას, რომელიც წარმოიქმნება ფორმის დამუშავების დროს და ში succes_messagesჩვენ ჩავწერთ სასიხარულო შეტყობინებებს.

სანამ გავაგრძელებთ, უნდა შევამოწმოთ, იყო თუ არა ფორმა წარმოდგენილი. თავდამსხმელს შეუძლია შეხედოს ატრიბუტის მნიშვნელობას მოქმედებაფორმიდან და გაარკვიეთ რომელი ფაილი ამუშავებს ამ ფორმას. და მას შეიძლება ჰქონდეს იდეა, გადავიდეს პირდაპირ ამ ფაილზე, ბრაუზერის მისამართის ზოლში შემდეგი მისამართის აკრეფით: http://site_address/register.php

ასე რომ, ჩვენ უნდა შევამოწმოთ უჯრედი გლობალურ POST მასივში, რომლის სახელი ემთხვევა ფორმიდან ჩვენი "რეგისტრაციის" ღილაკის სახელს. ამ გზით ვამოწმებთ, დააწკაპუნეთ თუ არა ღილაკზე „რეგისტრაცია“.

თუ თავდამსხმელი შეეცდება პირდაპირ ამ ფაილზე გადასვლას, ისინი მიიღებენ შეცდომის შეტყობინებას. შეგახსენებთ, რომ $address_site ცვლადი შეიცავს საიტის სახელს და ის დეკლარირებული იყო ფაილში dbconnect.php.

სესიაში captcha მნიშვნელობა დაემატა ფაილში მისი გენერირებისას captcha.php. შეგახსენებთ, მე კვლავ გაჩვენებთ კოდის ამ ნაწილს ფაილიდან captcha.php, სადაც captcha მნიშვნელობა ემატება სესიას:

ახლა მოდით გადავიდეთ თავად გადამოწმებაზე. ფაილში რეგისტრაცია.php, if ბლოკის შიგნით, სადაც ვამოწმებთ დააწკაპუნეთ თუ არა ღილაკზე "რეგისტრაცია", უფრო სწორად სად არის მითითებული "კომენტარი" // (1) ადგილი კოდის შემდეგი ნაწილისთვის"ჩვენ ვწერთ:

//შეამოწმეთ მიღებული captcha //შეამცირეთ შუალედები სტრიქონის დასაწყისიდან და ბოლოდან $captcha = trim($_POST["captcha"]); if(isset($_POST["captcha"]) && !empty($captcha))( //შეადარეთ მიღებული მნიშვნელობა სესიის მნიშვნელობასთან. if(($_SESSION["rand"] != $captcha) && ($_SESSION ["rand"] != ""))( // თუ captcha არ არის სწორი, მაშინ ჩვენ ვაბრუნებთ მომხმარებელს რეგისტრაციის გვერდზე და იქ გამოვაჩენთ შეცდომის შეტყობინებას, რომ მან არასწორი captcha შეიყვანა $error_message = "

შეცდომა! თქვენ შეიყვანეთ არასწორი captcha

"; // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] = $error_message; // დააბრუნეთ მომხმარებელი სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 Moved Permanently"); header("Location: " .$address_site ."/form_register.php"); //შეაჩერე სკრიპტის გასვლა(); ) // (2) მოათავსეთ კოდის შემდეგი ნაწილი )else( //თუ captcha არ არის გადაცემული ან ის ცარიელია, გადით ("

შეცდომა! არ არსებობს დამადასტურებელი კოდი, ანუ captcha კოდი. შეგიძლიათ გადახვიდეთ მთავარ გვერდზე.

"); }

შემდეგი, ჩვენ უნდა დავამუშაოთ მიღებული მონაცემები POST მასივიდან. უპირველეს ყოვლისა, ჩვენ უნდა შევამოწმოთ გლობალური POST მასივის შინაარსი, ანუ არის თუ არა იქ უჯრედები, რომელთა სახელები შეესაბამება ჩვენი ფორმის შეყვანის ველების სახელებს.

თუ უჯრედი არსებობს, მაშინ ამ უჯრიდან ვჭრით სივრცეებს ​​ხაზის დასაწყისიდან და ბოლოდან, წინააღმდეგ შემთხვევაში, მომხმარებელს გადამისამართებთ უკან გვერდზე რეგისტრაციის ფორმით.

შემდეგ, მას შემდეგ, რაც შუალედები მოვაჭრით, ვამატებთ ხაზს ცვლადში და ვამოწმებთ ამ ცვლადს სიცარიელეზე, თუ ცარიელი არ არის, გადავდივართ, წინააღმდეგ შემთხვევაში, მომხმარებელს გადამისამართებთ უკან გვერდზე რეგისტრაციის ფორმით.

ჩასვით ეს კოდი მითითებულ ადგილას" // (2) ადგილი კოდის შემდეგი ნაწილისთვის".

/* შეამოწმეთ არის თუ არა ფორმიდან გამოგზავნილი მონაცემები გლობალურ მასივში $_POST და გაგზავნილი მონაცემები ჩაალაგეთ ჩვეულებრივ ცვლადებში.*/ if(isset($_POST["first_name"]))( //შეამცირეთ სივრცეები თავიდანვე და სტრიქონის დასასრული $first_name = trim($_POST["first_name"]); //შეამოწმეთ ცვლადის სიცარიელე if(!empty($first_name))( // უსაფრთხოების მიზნით, გადააკეთეთ სპეციალური სიმბოლოები HTML ერთეულებად $first_name = htmlspecialchars($first_name, ENT_QUOTES) ; )else( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .= "

შეიყვანეთ თქვენი სახელი

სახელის ველი აკლია

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); ) if( isset($_POST["last_name"]))( //შეამცირეთ სივრცეები სტრიქონის დასაწყისიდან და ბოლოდან $last_name = trim($_POST["last_name"]); if(!empty($last_name)) ( // უსაფრთხოების მიზნით, გადააკეთეთ სპეციალური სიმბოლოები HTML ერთეულებად $last_name = htmlspecialchars($last_name, ENT_QUOTES); )else( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .= "

გთხოვთ შეიყვანოთ თქვენი გვარი

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); ) )else ( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .= "

გვარის ველი აკლია

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); ) if( isset($_POST["ელფოსტა"]))( //შეამცირეთ სივრცეები სტრიქონის დასაწყისიდან და ბოლოდან $email = trim($_POST["email"]); if(!empty($email)) ( $email = htmlspecialchars ($email, ENT_QUOTES); // (3) კოდის მდებარეობა ელფოსტის მისამართის ფორმატის და მისი უნიკალურობის შესამოწმებლად )else( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .="

Შეიყვანეთ თქვენი ელექტრონული ფოსტა

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); ) )else ( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .= "

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); ) if( isset($_POST["პაროლი"]))( //შეამცირეთ სივრცეები სტრიქონის დასაწყისიდან და ბოლოდან $password = trim($_POST["პაროლი"]); if(!empty($password)) ( $password = htmlspecialchars ($password, ENT_QUOTES); //დაშიფრეთ პაროლი $password = md5($password."top_secret"); )else( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .="

Შეიყვანეთ თქვენი პაროლი

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); ) )else ( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .= "

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); ) // (4) ადგილი მონაცემთა ბაზაში მომხმარებლის დამატების კოდისთვის

განსაკუთრებული მნიშვნელობა აქვს სფეროს ელ. ჩვენ უნდა შევამოწმოთ მიღებული საფოსტო მისამართის ფორმატი და მისი უნიკალურობა მონაცემთა ბაზაში. ანუ არის თუ არა უკვე დარეგისტრირებული მომხმარებელი იგივე ელ.ფოსტის მისამართით?

მითითებულ ადგილას" // (3) კოდის მდებარეობა საფოსტო მისამართის ფორმატის და მისი უნიკალურობის შესამოწმებლად"დაამატეთ შემდეგი კოდი:

//შეამოწმეთ მიღებული ელ.ფოსტის მისამართის ფორმატი ჩვეულებრივი გამოთქმის გამოყენებით $reg_email = "/^**@(+(*+)*\.)++/i"; //თუ მიღებული ელფოსტის მისამართის ფორმატი არ ემთხვევა ჩვეულებრივ გამონათქვამს if(!preg_match($reg_email, $email))( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .= "

თქვენ შეიყვანეთ არასწორი ელფოსტა

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); ) // ვამოწმებთ არის თუ არა ასეთი მისამართი უკვე მონაცემთა ბაზაში $result_query = $mysqli->query("SELECT `email` FROM `users` WHERE `email`="".$email."""); / /თუ მიღებულთა რაოდენობა არის ზუსტად ერთი მწკრივი, რაც ნიშნავს, რომ მომხმარებელი ამ ელ.ფოსტის მისამართით უკვე დარეგისტრირებულია, თუ($result_query->num_rows == 1)( //თუ შედეგი არ არის მცდარი, თუ(($row = $result_query->fetch_assoc()) != false) ( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .= "

მომხმარებელი ამ ელფოსტის მისამართით უკვე დარეგისტრირებულია

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); )else( // შეცდომის შეტყობინების შენახვა სესიაზე $_SESSION["error_messages"] .= "

შეცდომა მონაცემთა ბაზის მოთხოვნაში

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადავიდა მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); ) /* არჩევის დახურვა */ $ result_query-> close(); //Stop the script exit(); ) /* არჩევის დახურვა */ $result_query->close();

ასე რომ, ჩვენ დავასრულეთ ყველა შემოწმება, დროა დავამატოთ მომხმარებელი მონაცემთა ბაზაში. მითითებულ ადგილას" // (4) ადგილი მონაცემთა ბაზაში მომხმარებლის დამატების კოდისთვის"დაამატეთ შემდეგი კოდი:

//შეკითხვა მომხმარებლის მონაცემთა ბაზაში დასამატებლად $result_query_insert = $mysqli->query("INSERT INTO `users` (first_name, name, email, password) VALUES ("".$first_name."", "".$last_name ." ", "".$email.", "".$პაროლი.")"); if(!$result_query_insert)( // შეინახეთ შეცდომის შეტყობინება სესიაზე. $_SESSION["error_messages"] .= "

შეცდომა მომხმარებლის მონაცემთა ბაზაში დამატების მოთხოვნაში

"; //მომხმარებლის დაბრუნება სარეგისტრაციო გვერდის სათაურში ("HTTP/1.1 301 გადაადგილებულია მუდმივად"); header("მდებარეობა: ".$address_site."/form_register.php"); //Stop the script exit(); )else( $_SESSION["success_messages"] = "

რეგისტრაცია წარმატებით დასრულდა!!!
ახლა თქვენ შეგიძლიათ შეხვიდეთ თქვენი მომხმარებლის სახელისა და პაროლის გამოყენებით.

"; //მომხმარებლის გაგზავნა ავტორიზაციის გვერდის სათაურში ("HTTP/1.1 301 გადავიდა მუდმივად"); header("მდებარეობა: ".$address_site."/form_auth.php"); ) /* მოთხოვნის დასრულება */ $ result_query_insert-> close();//დახურეთ კავშირი მონაცემთა ბაზასთან $mysqli->close();

თუ მონაცემთა ბაზაში მომხმარებლის დამატების მოთხოვნაში მოხდა შეცდომა, ჩვენ ვამატებთ შეტყობინებას ამ შეცდომის შესახებ სესიაზე და ვაბრუნებთ მომხმარებელს რეგისტრაციის გვერდზე.

წინააღმდეგ შემთხვევაში, თუ ყველაფერი კარგად წავიდა, ჩვენც ვამატებთ შეტყობინებას სესიაზე, მაგრამ ამჯერად ეს უფრო სასიამოვნოა, კერძოდ, მომხმარებელს ვეუბნებით, რომ რეგისტრაცია წარმატებით დასრულდა. და ჩვენ მას გადავიყვანთ გვერდზე ავტორიზაციის ფორმით.

ელ.ფოსტის მისამართის ფორმატის და პაროლის სიგრძის შემოწმების სკრიპტი არის ფაილში header.php, ასე რომ, ის ასევე ვრცელდება ამ ფორმის ველებზე.

სხდომა ასევე იწყება ფაილში header.php, ასე რომ ფაილში form_auth.phpარ არის საჭირო სესიის დაწყება, რადგან ჩვენ მივიღებთ შეცდომას.


როგორც უკვე ვთქვი, ელ.ფოსტის მისამართის ფორმატის და პაროლის სიგრძის შემოწმების სკრიპტი ასევე მუშაობს აქ. ამიტომ, თუ მომხმარებელი არასწორ ელ.ფოსტის მისამართს ან მოკლე პაროლს შეიყვანს, მაშინვე მიიღებს შეცდომის შეტყობინებას. Ღილი შემოსვლაგახდება უმოქმედო.

შეცდომების გამოსწორების შემდეგ ღილაკი შემოსვლაგააქტიურდება და მომხმარებელი შეძლებს ფორმის გაგზავნას სერვერზე, სადაც მოხდება მისი დამუშავება.

მომხმარებლის ავტორიზაცია

მნიშვნელობის ატრიბუტისთვის მოქმედებაავტორიზაციის უნარს აქვს მითითებული ფაილი auth.php, ეს ნიშნავს, რომ ფორმა დამუშავდება ამ ფაილში.

ასე რომ, გახსენით ფაილი auth.phpდა დაწერეთ კოდი ავტორიზაციის ფორმის დასამუშავებლად. პირველი რაც უნდა გააკეთოთ არის სესიის დაწყება და ფაილის დაკავშირება dbconnect.phpმონაცემთა ბაზასთან დასაკავშირებლად.

როდესაც თქვენ დააწკაპუნებთ საიტიდან გასვლის ბმულზე, ჩვენ გადავდივართ ფაილში გამოსვლა.php, სადაც ჩვენ უბრალოდ ვანადგურებთ უჯრედებს ელ.ფოსტის მისამართით და პაროლით სესიიდან. ამის შემდეგ მომხმარებელს ვუბრუნებთ იმ გვერდზე, რომელზეც დააწკაპუნეთ ბმულზე გასასვლელი.

ფაილის კოდი logout.php:

Სულ ეს არის. ახლა თქვენ იცით, როგორ დანერგოთ და დაამუშავოთ მომხმარებლის რეგისტრაციისა და ავტორიზაციის ფორმები თქვენს ვებსაიტზე. ეს ფორმები გვხვდება თითქმის ყველა ვებსაიტზე, ამიტომ ყველა პროგრამისტმა უნდა იცოდეს როგორ შექმნას ისინი.

ჩვენ ასევე ვისწავლეთ შეყვანის მონაცემების დამოწმება, როგორც კლიენტის მხარეს (ბრაუზერში, JavaScript, jQuery-ის გამოყენებით) და სერვერის მხარეს (PHP-ის გამოყენებით). ასევე ვისწავლეთ საიტის დატოვების პროცედურის განხორციელება.

ყველა სკრიპტი დატესტილია და მუშაობს. თქვენ შეგიძლიათ ჩამოტვირთოთ არქივი ამ პატარა საიტის ფაილებით ამ ბმულიდან.

მომავალში დავწერ სტატიას სადაც აღვწერ. და ასევე ვგეგმავ სტატიის დაწერას, სადაც ავხსნი (გვერდის გადატვირთვის გარეშე). ასე რომ, იმისათვის, რომ იყოთ ინფორმირებული ახალი სტატიების გამოშვების შესახებ, შეგიძლიათ გამოიწეროთ ჩემი ვებგვერდი.

თუ თქვენ გაქვთ რაიმე შეკითხვები, გთხოვთ დამიკავშირდეთ და თუ შეამჩნევთ რაიმე შეცდომას სტატიაში, გთხოვთ შემატყობინოთ.

გაკვეთილის გეგმა (ნაწილი 5):

  • ავტორიზაციის ფორმისთვის HTML სტრუქტურის შექმნა
  • ჩვენ ვამუშავებთ მიღებულ მონაცემებს
  • ჩვენ ვაჩვენებთ მომხმარებლის მისალმებას საიტის სათაურში
  • მოგეწონათ სტატია?

    ჩვენ ვისწავლით, თუ როგორ უნდა გავაკეთოთ მარტივი მომხმარებლის ავტორიზაცია საიტზე. საიტს შეიძლება ჰქონდეს გვერდები მხოლოდ ავტორიზებული მომხმარებლებისთვის და ისინი სრულად იმუშავებენ, თუ მათ დავუმატებთ ჩვენს ავთენტიფიკაციის ბლოკს. მის შესაქმნელად საჭიროა MySQL მონაცემთა ბაზა. მას შეიძლება ჰქონდეს 5 სვეტი (მინიმუმ), ან მეტი, თუ გსურთ დაამატოთ ინფორმაცია მომხმარებლების შესახებ. მოდით ვუწოდოთ მონაცემთა ბაზას "Userauth".

    მოდით შევქმნათ მასში შემდეგი ველები: ID მომხმარებელთა რაოდენობის დასათვლელად, UID მომხმარებლის უნიკალური საიდენტიფიკაციო ნომრისთვის, მომხმარებლის სახელი მომხმარებლის სახელი, ელფოსტა მისი ელექტრონული ფოსტის მისამართისთვის და პაროლი პაროლისთვის. თქვენ შეგიძლიათ გამოიყენოთ თქვენი არსებული მონაცემთა ბაზა მომხმარებლის ავტორიზაციისთვის, უბრალოდ, როგორც ახალი მონაცემთა ბაზის შემთხვევაში, შექმენით მასში შემდეგი ცხრილი.

    MySQL კოდი

    შექმენით ცხრილი `მომხმარებლები` (`ID` int (11) NOT NULL AUTO_INCREMENT, `UID` int (11) NOT NULL, `მომხმარებლის სახელი` ტექსტი NOT NULL, `ელფოსტის` ტექსტი NOT NULL, `პაროლი` ტექსტი NOT NULL, ძირითადი გასაღები (`ID`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

    ახლა შევქმნათ ფაილი "sql.php". ის პასუხისმგებელია მონაცემთა ბაზასთან დაკავშირებაზე. ეს კოდი, პირველ რიგში, ქმნის ცვლადებს სერვერისთვის და მომხმარებლისთვის, როდესაც ის სერვერს უკავშირდება. მეორეც, ის შეარჩევს მონაცემთა ბაზას, ამ შემთხვევაში "USERAUTH". ეს ფაილი უნდა იყოს ჩართული "log.php" და "reg.php" მონაცემთა ბაზაში შესასვლელად.

    PHP კოდი

    შემდეგი არის შესვლის გვერდი, დაე მას ეწოდოს "login.php". პირველ რიგში, ის ამოწმებს შეყვანილ მონაცემებს შეცდომებზე. გვერდს აქვს ველები მომხმარებლის სახელი, პაროლი, გაგზავნის ღილაკი და რეგისტრაციის ბმული. როდესაც მომხმარებელი დააჭერს ღილაკს "Login", ფორმა დამუშავდება კოდით "log.php" ფაილიდან და შემდეგ შევა სისტემაში.

    PHP კოდი

    შესვლის ფორმა

    მომხმარებლის სახელი
    პაროლი
    რეგისტრაცია

    შემდეგ ჩვენ ვწერთ სკრიპტს სისტემაში შესასვლელად. მოდით დავარქვათ მას "log.php". მას აქვს SQL ინექციებიდან შეყვანილი მონაცემების გასუფთავების ფუნქცია, რამაც შეიძლება გაანადგუროს თქვენი სკრიპტი. მეორეც, ის იღებს ფორმის მონაცემებს და ამოწმებს სისწორეს. თუ შეყვანის მონაცემები სწორია, სკრიპტი აგზავნის მომხმარებელს ავტორიზებული მომხმარებლების გვერდზე, თუ არა, აყენებს შეცდომებს და აგზავნის მომხმარებელს შესვლის გვერდზე.

    PHP კოდი

    მოდით გავაკეთოთ სარეგისტრაციო გვერდი, დავარქვათ "register.php". შესვლის გვერდის მსგავსია, მხოლოდ მას აქვს კიდევ რამდენიმე ველი და რეგისტრაციის ლინკის ნაცვლად არის ბმული login.php-ზე იმ შემთხვევაში, თუ მომხმარებელს უკვე აქვს ანგარიში.

    PHP კოდი

    Სარეგისტრაციო ფორმა

    მომხმარებლის სახელი
    ელფოსტა
    პაროლი
    Გაიმეორეთ პაროლი
    მე მაქვს ანგარიში

    ახლა ჩვენ შევქმნით სარეგისტრაციო სკრიპტს ფაილში "reg.php". მასში შედის "sql.php" მონაცემთა ბაზასთან დასაკავშირებლად. შეყვანის ველის გასასუფთავებლად გამოიყენება იგივე ფუნქცია, როგორც შესვლის სკრიპტში. ცვლადები დაყენებულია შესაძლო შეცდომებისთვის. შემდეგი არის ფუნქცია უნიკალური იდენტიფიკატორის შესაქმნელად, რომელიც აქამდე არასოდეს ყოფილა მოწოდებული. შემდეგ ხდება სარეგისტრაციო ფორმის მონაცემების ამოღება და შემოწმება. შემოწმებულია ელექტრონული ფოსტის მისამართის სწორი ფორმატით და პაროლის ხელახლა შეყვანის მიზნით. შემდეგ სკრიპტი ამოწმებს, არის თუ არა მონაცემთა ბაზაში იგივე სახელის მომხმარებელი და, თუ ასეა, აცნობებს შეცდომას. და ბოლოს, კოდი ამატებს მომხმარებელს მონაცემთა ბაზაში.

    PHP კოდი

    თქვენ ასევე უნდა შექმნათ სკრიპტი მომხმარებლის სისტემიდან გასასვლელად. ის წყვეტს სესიას მომხმარებლისთვის მოცემული უნიკალური ID და სახელით და შემდეგ გადამისამართებს მომხმარებელს შესვლის გვერდზე.

    PHP კოდი

    დაბოლოს, "auth.php" სკრიპტის გამოყენება შესაძლებელია მხოლოდ ავტორიზებული მომხმარებლებისთვის გვერდებზე წვდომისთვის. ის ამოწმებს შესვლის დეტალებს და, თუ ისინი სწორია, საშუალებას აძლევს მომხმარებელს დაათვალიეროს გვერდები და თუ არა, სთხოვს მათ შესვლას. გარდა ამისა, თუ ვინმე შეეცდება საიტის გატეხვას ერთ-ერთი სესიის შექმნით, ის შეწყდება, როგორც ზოგად შემთხვევაში.

    PHP კოდი

    ზემოთ მოცემულ კოდში ერთ-ერთი პირობა არის შეკითხვის საგანი.

    ავტორიზებული მომხმარებლებისთვის საჭიროა შემდეგი კოდის ჩასმა გვერდზე, მას ჰქვია, მაგალითად, "member.php", მაგრამ თქვენი შეიძლება ეწოდოს ნებისმიერს, რაც გსურთ.

    PHP კოდი

    თქვენ უფლება გაქვთ შეხვიდეთ ამ გვერდზე. Გარეთ გასვლა ( )

    მომხმარებლის ავთენტიფიკაცია მზად არის!

    ბოლოს შეცვლილია 2018 წლის 5 აპრილს ვინსის მიერ.

    მომხმარებლის შესვლა და რეგისტრაცია არის ძირითადი მოთხოვნა ნებისმიერი CMS აპლიკაციისთვის. ეს არის პირველი სამუშაო პროექტის დაწყებისას. აპლიკაცია მომხმარებლის შესვლის ავთენტიფიკაციით უზრუნველყოფს უსაფრთხოებას ანონიმური წვდომის აღკვეთით. ჩვენს აპლიკაციაში ავთენტიფიკაციის ჩართვის სხვადასხვა გზა არსებობს, როგორიცაა OAuth შესვლის ჩართვა ან ერთჯერადი შესვლის (SSO) და სხვა მსგავსი გზების დანერგვა. წინა გაკვეთილში ჩვენ ვნახეთ როგორ განვახორციელოთ და ასევე.

    ეს მაგალითი მოიცავს როგორც შესვლის, ასევე რეგისტრაციის ფუნქციებს. მე გამოვიყენე MySQL მონაცემთა ბაზა რეგისტრირებული წევრების შესანახად. მომხმარებლის რეგისტრაცია შეიცავს ინფორმაციას მომხმარებლისგან დეტალების მისაღებად. ამ ფორმის გაგზავნისას, ფორმის მონაცემები განთავსდება PHP-ში და ინახება მონაცემთა ბაზაში. მომხმარებლის პაროლი დაშიფრული იქნება მონაცემთა ბაზაში შენახვამდე. PHP კოდში გამოქვეყნებამდე. როდესაც მომხმარებელი შესულია მოქმედი რწმუნებათა სიგელებით, მაშინ მომხმარებელს და მას მიეცემა უფლება შემდგომ გააგრძელონ.

    მომხმარებლის რეგისტრაციის ფორმა

    ეს კოდი არის მომხმარებლისთვის რეგისტრაციის ფორმის ჩვენება. როდესაც მომხმარებელი წარადგენს ფორმას თავისი დეტალებით, JavaScript ფუნქცია გამოიძახება მომხმარებლის შეყვანის დასადასტურებლად. წარმატებული ვალიდაციის შემდეგ, PHP კოდი წაიკითხავს გამოქვეყნებულ ფორმას მონაცემთა ბაზის ჩასმის შესასრულებლად.