Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Χρησιμοποιω PHP με Apache και θέλω όταν κάνει login ο χρήστης να τον κρατάει μόνιμα συνδεδεμένο (εκτός αν πατήσει logout). Δε θέλω να το κάνε με cookies, προσπαθώ με 

JSON Web Tokens. Οπότε δουλέυω το php-jwt (https://github.com/firebase/php-jwt).

 

 

Αυτό που πρέπει να γίνει είναι 

Απο front-end στέλνεις τα login δεδομένα στην php

H php αποφασίζει αν μπορείς να κάνεις login

Αν μπορείς, κατασκευάζεις ενα JWT οπως εδώ https://www.sitepoint.com/php-authorization-jwt-json-web-tokens/ (και εδω php-jwt έχει)

Το στέλνεις front-end 

Το αποθηκεύεις σε local storage

 

Αυτό που δεν έχω βρει είναι πως θα βάζω το JWT αυτόματα μέσα στο header σε κάθε request που ξεκινάει απο χρήστη και πάει server. Δεν θέλω να το στέλνω με φόρμα, ούτε μόνο στα get πχ, αλλά να μπαίνει αυτόματα παντού.

Μετά, σε κάθε σελίδα που θα θέλω να τσεκάρω αν ο χρήστης είναι Logedin θα υπάρχει php που τσεκάρει το header, θα επαληθέυει οτι το JWT είναι σωστό και θα εμφανίζει το ανάλογο μενου, για χρήστες logedin ή οχι.

 

Αν έχετε κάποια πρόταση, θα με βοηθούσε πολύ. Ευχαριστώ. 

Δημοσ.

Γενικά έχεις 2 επιλογές: javascript και localstorage ή http-only cookie, με αυτή τη σειρά προτίμησης.

 

Αυτό που θες γίνεται σε περίπτωση js app με custom headers σε κάθε request ή με cookie σε κάθε άλλη περίπτωση, ο browser δεν θα βάλει ποτέ μόνος του κάτι από το localstorage σε header.

Δημοσ.

Πριν πάω σε laravel θέλω να καταλάβω πως μπορεί να γίνει σε ένα απλο σύστημα.

Εγώ δεν καταλαβαίνω πως γίνετε να το βάζεις σε header το JWT απο τη στιγμή που το πήρες. Να αναδιατυπώσω

 

Απο front-end στέλνεις τα login δεδομένα στην php

H php αποφασίζει αν μπορείς να κάνεις login

Αν μπορείς, κατασκευάζεις ενα JWT 

Το στέλνεις front-end 

Το αποθηκεύεις σε local storage

 

Ωραία. Το εχεις το JWT. Είσαι loged-in. Και πας και βάζεις ένα url στο address bar. Και πατάς enter. Πως το jwt το βάζεις απο το localstorage σε header ; 

Δεν έχεις ajax πχ να προλάβεις να σετάρεις JWT header. Έχεις ένα JWT στο local storage και μετά βάζεις ένα url στο address bar και πατάς enter. Άρα δε μπορείς/προλαβαίνεις να στείλεις JWT header. Αρα η σελίδα στην οποία καταλήγεις, σε θεωρεί logged-out, ενω δεν είσαι, και σε στέλνει για login. Σωστά;

 

Αρα ή δεν κάνει το JWT γ αυτή τη δουλειά, ή δεν κάνει γενικά το token authentication γ αυτή τη δουλειά, ή εγώ δεν κατάλαβα κάτι. Πιο πιθανό το τρίτο.
Δημοσ.

To JWT μπορείς είτε να το βάλεις με js στα headers είτε να το χρησιμοποιήσεις ως cookie, όπως σου έγραψα και παραπάνω οπότε θα πηγαινοέρχεται σε κάθε request του συγκεκριμένου domain. 

 

Ένα παράδειγμα που ίσως βοηθήσει στη δεύτερη περίπτωση είναι εδώ

  • Like 1
Δημοσ.

Πριν πάω σε laravel θέλω να καταλάβω πως μπορεί να γίνει σε ένα απλο σύστημα.

Εγώ δεν καταλαβαίνω πως γίνετε να το βάζεις σε header το JWT απο τη στιγμή που το πήρες. Να αναδιατυπώσω

 

Απο front-end στέλνεις τα login δεδομένα στην php

H php αποφασίζει αν μπορείς να κάνεις login

Αν μπορείς, κατασκευάζεις ενα JWT 

Το στέλνεις front-end 

Το αποθηκεύεις σε local storage

 

Ωραία. Το εχεις το JWT. Είσαι loged-in. Και πας και βάζεις ένα url στο address bar. Και πατάς enter. Πως το jwt το βάζεις απο το localstorage σε header ; 

Δεν έχεις ajax πχ να προλάβεις να σετάρεις JWT header. Έχεις ένα JWT στο local storage και μετά βάζεις ένα url στο address bar και πατάς enter. Άρα δε μπορείς/προλαβαίνεις να στείλεις JWT header. Αρα η σελίδα στην οποία καταλήγεις, σε θεωρεί logged-out, ενω δεν είσαι, και σε στέλνει για login. Σωστά;

 

Αρα ή δεν κάνει το JWT γ αυτή τη δουλειά, ή δεν κάνει γενικά το token authentication γ αυτή τη δουλειά, ή εγώ δεν κατάλαβα κάτι. Πιο πιθανό το τρίτο.

Το βλεπεις απο την σκοπιά του κλασικου php mvc. Δες το από πλευρά client side mvc, πχ angular οπου το πρωτο response επιστρέφει ενα js προγραμμα

  • Like 1
Δημοσ.

Ωραία, (νομίζω ότι) κατάλαβα τι μου λέτε και οι δυο, σύμφωνα και με (μόνο την θεωρία απο εδώ και όχι την υλοποίηση) https://auth0.com/blog/cookies-vs-tokens-definitive-guide/ και https://www.sitepoint.com/php-authorization-jwt-json-web-tokens/

 

Ψευδοκώδικας - flowchart, στην περίπτωση που έχεις απλά php, mysql, javascript, jquery

 

Server

gets usernname/password

checks

if ok, create jwt

send it to client

 

Client

gets jwt

saves it to cookie

 

Client

goes to a page, either by form or ajax or typing url

 

Server

Checks the jwt found in cookie 

if valid, ok

if not valid send to login page

 

Σύμφωνα με τα 2 Link που έγραψα πιο πάνω, "Now that the client has the token, you can store it using JS or whichever mechanism you like." ... "The token is generally sent as an addition Authorization header in form of Bearer {JWT}, but can additionally be sent in the body of a POST request or even as a query parameter." .... "You can store the token in a cookie instead"

 

Οπότε νομιζω η λογική μου δεν είναι τελείως άκυρη. Αλλάζει ο τρόπος μεταφοράς του jwt και αποθήκευσης του στο front-end. Η βασική διαφορά με cookie authentication παραμένει : "The server does not keep a record of which users are logged in or which JWTs have been issued." Ο σερβερ δεν αποθηκεύει τίποτα στη βάση σχετικά με το cookie. Κάπως του στέλνεις ένα jwt και το αξιολογέι και κρίνει αν θα σε πετάξει έξω ή όχι.

 

Αν κάνω κάπου λάθος πείτε μου. Ευχαριστώ και πάλι.

Δημοσ.

Δεν κάνεις ακριβώς λάθος αλλά δεν είναι και απολύτως σωστά αυτά που αναφέρονται, απλά για να τα έχεις πιο ξεκάθαρα στο μυαλό σου όμως, η πιο σωστή επιλογή αν επιλέξεις να χρησιμοποιήσεις JWT θα ήταν το Bearer στο header, που προϋποθέτει javascript. Η λύση του url param ή form field δεν θεωρώ ότι πρέπει να είναι στα υπόψιν για γενική χρήση οπότε την προσπερνάω.

 

Η άλλη λύση είναι cookie όπου δεν υπάρχει η session id αλλά το jw token που δημιουργείς στον server, Set-Cookie: myToken=... και το χρησιμοποιεί αυτόματα ο browser σε κάθε επόμενο request, οπότε φροντίζεις server side να το ελέγχεις και να χρησιμοποιήσει ότι πληροφορία έχει.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...