Letní akce Python týden
Pouze tento týden sleva až 80 % na kurzy Python. Lze kombinovat s akcí Letní slevy na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!
Avatar
Adam Matis
Člen
Avatar
Adam Matis:3.10.2018 23:50

Dělám si vlastní mvc 'framework' a ted si trochu nevím rady s odhlášením uživatele. Resp spíše jak zjistím, že uživatel kliknul na button ?

Zkusil jsem: Dokázal bych to udělat tak, že bych měl button ve formu a do action bych dal funkci která zničí session + přesměruje jinam ale chtěl bych to vyřešit nějak lépe.
Měl by pro mě někdo nějaký tip ? Dkěuji

Chci docílit: Udělat odhlášení podle pravidel mvc.

 
Odpovědět 3.10.2018 23:50
Avatar
dez1nd
Člen
Avatar
Odpovídá na Adam Matis
dez1nd:4.10.2018 5:58

musíš to udělat přes formulář.

 
Nahoru Odpovědět  -2 4.10.2018 5:58
Avatar
Zdeněk Srb
Člen
Avatar
Zdeněk Srb:4.10.2018 9:07

používám toto:

<ul class="navbar-nav ml-auto">
<?php if(isset($_SESSION['user_id'])) : ?>
  <li class="nav-item">
    <a class="nav-link" href="<?php echo URLROOT; ?>/users/logout"><i class="fa fa-sign-out" aria-hidden="true"></i> Logout</a>
  </li>
<?php else : ?>
  <li class="nav-item">
    <a class="nav-link" href="<?php echo URLROOT; ?>/users/register">Register</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" href="<?php echo URLROOT; ?>/users/login">Login</a>
  </li>
<?php endif; ?>
</ul>

používám nějaký základní systém co parsuje url a podle toho vola třídu/metodu kontroleru, to asi používáš také

Editováno 4.10.2018 9:08
 
Nahoru Odpovědět  +1 4.10.2018 9:07
Avatar
petr.jouza
Člen
Avatar
Odpovídá na Adam Matis
petr.jouza:5.10.2018 8:03

Ahoj, sice neznám pravila MVC, ale používám jednoduché funkční řešení.

mám stránku odhlasit.php, kde zničím SESSION, COOKIE (uložený token) provedu nějaký zápis do DB k tokenu a přesměruju uživatele někam.

Příklad (bez mého SQL):

<?php
session_destroy() ;
setcookie('token', $token, time() - 3600) ;
header('Location: ./index.php?logOff') ;
exit() ;

a na každé stránce má uživatel k dispozici tlačítko pro odhlášení, které ho přesměruje pouze na stránku odhlasit.php

 
Nahoru Odpovědět 5.10.2018 8:03
Avatar
Adam Matis
Člen
Avatar
Odpovídá na petr.jouza
Adam Matis:5.10.2018 10:44

Ahoj děkuji za odpověď ale já nemám problém s php kodem ale spíše jak danou funkci (metodu) zavolat.

resp asi bych mohl udělat něco jako

<form action="odhlaseni.php" method="post">
<button  type="submit" name="odhlaseni" class="btn btn-primary">Odhlášení</button>
</form>

Ale když už teda dělám to mvc, tak bych si představoval že bych měl logku spíše v modelu.

Ještě mě teď napadla jedna věc že bych si udělal statickou metodu na odhlaseni a tu bych dal do "action" bylo by to dobře i po stránce mvc architektury ?

 
Nahoru Odpovědět 5.10.2018 10:44
Avatar
petr.jouza
Člen
Avatar
Odpovídá na Adam Matis
petr.jouza:5.10.2018 10:52

Aha... Jak jsem psal. MVC neznám. S tím ti asi neporadím.

Já mám tlačítko velice jednoduše a tupě vytvořené jen takto:

<a href="./odhlasit.php"><button type="button">Odhlásit</button></a>
 
Nahoru Odpovědět  +1 5.10.2018 10:52
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Adam Matis
Jirka Jr:5.10.2018 12:23

Hele architektura mvc nemá žádná pravidla pro odhlášení.
Jen řeší oddělení prezentace (View), řídícího kódu (Controller) a toho, co ta aplikace vlastně dělá (Model)

  1. to co zničí session, je z pohledu MVC Model
  2. to co vyplivne do browseru odhlašovací formulář nebo odkaz, je z pohledu MVC View
  3. a pak máš nejspíš nějakej MVC Controller a v něm akci, která volá ten odhlašovací kód z Modelu a pak přesměruje někam jinam

takže se připojuju, k tomu, co výše sepsal Zdeněk Srb

 
Nahoru Odpovědět  +1 5.10.2018 12:23
Avatar
Jirka Jr
Člen
Avatar
Odpovídá na Adam Matis
Jirka Jr:5.10.2018 12:36

A ještě malá poznámka:

Pokud kód, který se provádí v nějaké akci nějakého Controlleru, není moc velký, tak nemusí nutně být oddělen zvlášť do samostatné Model třídy

Takže klidně ten kód pro odhlášení můžeš mít klidně v té odhlašovací akci toho users controlleru nebo authentication controlleru, nebo co tam máš ... protože zničení session fakt není dlouhý kód :-)

oddělit odhlašování nebo jakýkoli jiný modelový kód zvlášť do modelové třídy má smysl až ve chvíli, kdy

  • se ten kód rozroste
  • používáš v dané akci více různých strategií .... třeba v případě přihlášení/od­hlášení používáš víc různých autentizačních metod (lokální účet, facebook účet, google účet a pod)
  • nebo potřebuješ stejný kód akce poskytovat aj na web aj do api a není dobré ho mít duplikovaný na dvou místech
 
Nahoru Odpovědět 5.10.2018 12:36
Avatar
Zdeněk Srb
Člen
Avatar
Zdeněk Srb:5.10.2018 13:49

Asi bych se jako podíval na ten kurz objektový redakční systém MVC v PHP, tohle se tam určitě řeší.

 
Nahoru Odpovědět 5.10.2018 13:49
Avatar
Roman Havránek:10.10.2018 14:52

Ahoj,

určitě máš nějaký login controler, který můžeš zavolat přes js a on ti něco vrátí, tzn. button bude mít value = "logout", tu pošleš do controleru, ten tě odhlásí, response bude třeba string "lotOutSuccess" a přesměruješ v JS.

Jednoduché, funkční a hlavně asi správné.

Nahoru Odpovědět 10.10.2018 14:52
sleep();
Avatar
Mirek Slouka
Člen
Avatar
Odpovídá na Adam Matis
Mirek Slouka:11.10.2018 10:52

Podle nějakých "pravidel" MVC se to dá řešit tím způsobem, že v controlleru, např. UserController budeš mít metodu logout, na kterou když se odkážeš přes url: localhost/user/lo­gout. Dovnitř do té metody jen napíšeš co chceš, aby se stalo potom. Takže podle toho co jsem vyčetl tak zničíš session a přesměruješ to na login.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 11.10.2018 10:52
I can explain it to you, but I can't understand it for you.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.