Jump to content
Sign in to follow this  
nusun

CodeIgniter login,register controlleris

Recommended Posts

Nu cau. Chakarejos gar registraciju. Nav daudz sanācis gar viņām čakarēties.
Šis ir veidots uz CodeIgniter, zemāk ir kods no controllera.
Ko jūs par to sakat? Kas labi, kas nav labi?
 

	public function login()
	{
		$this->load->library('form_validation');
		$this->form_validation->set_rules('username', 'Username', 'required');
		$this->form_validation->set_rules('password', 'Password', 'required');
		if($this->form_validation->run()){
			//true
			$username = strip_tags(trim($this->input->post('username')));
			$password = trim($this->input->post('password'));
			// model function
			$parole = password_verify($password, PASSWORD_DEFAULT);
			if($this->m->canLogin($username, $parole)){
				$session_data = array(
					'username' => $username
				);
				$this->session->set_userdata($session_data);
				redirect(base_url() . 'forum/index');
			}else{
				$this->session->set_flashdata('error', $parole);
				redirect(base_url() . 'home/index');
			}
			
		}else{
			//false
			redirect(base_url() . 'home/index');
		}
	}
	public function logout(){
		$this->session->unset_userdata('username');
		redirect(base_url());
	}
	public function register(){
		$this->load->library('form_validation');
		$this->form_validation->set_rules('username', 'Username', 'required');
		$this->form_validation->set_rules('password', 'Password', 'required');
		$this->form_validation->set_rules('password2', 'Password', 'required');
		$this->form_validation->set_rules('email', 'Email', 'required');
		if($this->form_validation->run()){
			//true
			$username = strip_tags(trim($this->input->post('username')));
			$password = trim($this->input->post('password'));
			$password2 = trim($this->input->post('password2'));
			$epasts = $this->input->post('email');
			if(filter_var($epasts, FILTER_VALIDATE_EMAIL)){
			$email = $epasts;
			
			if($password == $password2){
				
			$parole = password_hash($password, PASSWORD_DEFAULT);
				
			if($this->m->canRegister($username, $parole, $email, $ign)){
				$session_data = array(
					'username' => $username
				);
				$this->session->set_userdata($session_data);
				redirect(base_url() . 'forum/index');
			}else{
				$this->session->set_flashdata('error', 'Nepareizi dati');
				redirect(base_url() . 'home/register');
			}
			}else{
				$this->session->set_flashdata('error', 'Paroles nesakrīt');
				redirect(base_url() . 'home/register');
			}
			}else{
				$this->session->set_flashdata('error', 'E-pasts neder');
				redirect(base_url() . 'home/register');
			}
		}else{
			//false
			$this->session->set_flashdata('error', 'Lauki tukši');
			redirect(base_url() . 'home/register');

		}
	}

 

Share this post


Link to post
Share on other sites

Kāpēc username nevar saturēt tagus? Latviski mainīgie? Vajadzētu izvairīties no daudzu rindiņu if blokiem. Login un register dublējās sessijas veidošanas kods, var iznest citā metodē. Nav norādīti, kuri lauki neizgāja validāciju. 
$this->session->set_flashdata('error', $parole); uz ekrāna paroli nebūtu labi rādīt.

  • Upvote 1

Share this post


Link to post
Share on other sites
6 minutes ago, LoyC said:

Vajadzētu izvairīties no daudzu rindiņu if blokiem.
$this->session->set_flashdata('error', $parole); uz ekrāna paroli nebūtu labi rādīt.

Varbūt stulbs jautājums, kapēc?

Tā parole bija testam lai redzu hashu. Un tāpat izvada to ko tu tiko ievadīji neviss to kas DB saglabāts.

Share this post


Link to post
Share on other sites

Kāpēc par daudzu rindiņu if? Jo slikti lasāms, metodei vajadzētu būt pēc iespējas īsākai un ātrāk atgriezt rezultātu.

  • Upvote 1

Share this post


Link to post
Share on other sites
1 hour ago, nusun said:

Varbūt stulbs jautājums, kapēc?

Tā parole bija testam lai redzu hashu. Un tāpat izvada to ko tu tiko ievadīji neviss to kas DB saglabāts.

(ja jautājums bija kāpēc nerādīt paroli)

Jo tad uzbrucējs var izskaitļot kā tu hašo paroles, piem., vai liec klāt "sāli", kādu algoritmu izmanto utt. un vēlāk izmantot kādas ievainojamības, kaut vai collision attack vai dajebko, cilvēkiem kam ir zināšanas varētu to izmantot, lai panāktu nejaukas lietas. (jo cik saprotu $parole = hash, right?)

Par cik neko īsti negribas šobrīd darīt, uzrakstīšu garu komentāru, kas diez vai noderēs, bet būšu vismaz sev laiku nositis :D

  • Ieteiktu sesijā par useri glabāt vairāk kā username, ieliec user objektu, vēlāk, kad gribēsi kaut vai izdrukāt avatar urli, vai ko tādu, kas lietotājam ir katrā logā jāredz (piem., userbar vai kas tāds) nebūs lieki datubāze jārausta, lai gan, kāds varētu iebilst, jo tad jādomā, kā efektīvi atjaunot sesijas datus, ja piemēram, profilam notiek kādas izmaiņas.
  • Un kas ir "$this->m"? Pieļauju kaut kāds autoloaded modelis (kopš neredzu kā "m" tiktu ielādēts), ne tā? Ieteiktu tad pārdēvēt uz kaut ko konkrētāku, like users_model vai kā tā, vairs īsti neatceros, CI savā dokumentācijā bija norādījuši kā labāk definēt modeļus.
  • Ja esi nolēmis, ka izmantosi kodā CI form_validation, tad tos garos ifus pie reģistrācijas vari noņemt izmantojot to, ir gan rūļi e-pastu pārbaudei, gan regular expressions, ko vari uzlikt lai userneimā maģiskus simbolus neliek un var custom kļūdu ziņojums arī definēt userim... https://www.codeigniter.com/userguide3/libraries/form_validation.html#rule-reference + Lai gan personīgi man tas validator nekad nav paticis, vienmēr problēmas ar out of box lietām viņam... lai gan who knows, pēdējais projekts, kas bija uz CI bija gandrīz pēc CI 3 parādīšanās, varbūt kaut ko papildinājuši
  • Un, jā, ja pieminēju validāciju, kāpēc pie reģistrācijas ir strip_tags? Prasītos brīdinājums, ka username nekorektus simbolus satur, otherwise, cilvēciņš visu dzīvi var domāt, ka viņa niks ir <script> (kas actually pat nezinātājam šķistu, kā legit niks), otrs risinājums ir ļaut ievadīt šos simbolus un datubāzē glabāt esceipotus (!! man pašam labāk patīk eskeipot izvadu, bet CI turas pie filozofijas, ka sūdus novērš jau pie ievades), jo $this->input->post ir vēl viens parametrs... bool - escape or not, neatceros vai pēc default bija true vai nē + vēl configā varēja kaut kur uzlikt, ka visus XSS mēģinājums pēc default met ārā pirms likšanas datubāzē

Tas arī viss ko varu pateikt par konkrēto koda piemēru.

Vēl pēc pieredzes iesaku jau laicīgi extendot parasto CI_Controller, noderēs ja izdomāsi, ka vajag kaut ko izdarīt globāli.
Nez kaut vai uz maintenance lapu redirektēt visus, kas nav administratori (Jā, nav labākais piemērs kopš ir .htaccess, bet ja godīgi, kuram patīk .htaccess čakarēt?), veikt kaut kādas pārbaudes or whatever

 

Mani 5 eurocenti, neslikts veikums imo

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.