Hoe maak ik MYSQL case sensitive?
Een paar dagen ben ik aan het stoeien met laravel 4.
Na veel lezen ben ik maar eens een simpel stukje login code aan het maken gegaan.
Alles werkt, alleen stuitte ik op een probleem waar ik om eerlijk te zijn nog nooit van had gehoord.
De situatie schets:
Ik heb een record username : admin en password : password. (We moeten toch wat test data hebben hehe)
Dus vul netjes mij formulier in admin password, voial, werkt.
Nog een keer testen in het formulier bart en password test, mooi! Een mooie error van de validator.
Denk zal het nog eens testen:
username: Admin en password: password, ik verwacht mijn mooie error, maar tevergeefs ben ingelogd.
Ik zoeken, print_r, var_dump gedaan, bijna laravel eraf geknikkert, kom ik er achter dat mysql case insensitive is. :s Wat dus wil zeggen dat Admin === admin.
Daar ben ik het niet mee eens.
Nu ben ik al aan het googlen geweest, en vond wel wat in de documentatie maar ben een beetje huiverig om aan die instellingen te zitten zonder dat ik er heel veel ervaring mee heb.
http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html
Heeft iemand goede en dan wel veilige handvaten om mysql case sensitive te maken zonder dat ik de rest sloop?
Dit is raar, bij mij is het namelijk niet zo wel moet ik zeggen dat ik PDO->prepare gebruik en bindParam misschien dat dit het al case sensitive maakt.
Als ik gebruikernaam Admin maak, en log in met admin krijg ik een foutmelding dat de gebruikersnaam of wachtwoord niet klopt.
Toevoeging op 28/08/2013 10:55:06:
P.S. dit zou je Database case sensitive moeten maken.
Case sensitive
Case insensitive
Zoals ik het nu zie gebruikt laravel wel PDO.
Ik zie zo snel niet waar die query word uitgevoerd.
Gebruik de Auth driver van laravel.
Ik weet niet, maar ik zie nog iets vreemds.
Als ik in auth de table verander naar iets onzinnigs dan kan ik nog steeds inloggen.. hmm..
Toch nog iets niet helemaal pluis denk ik.
EDIT dank je voor de edit. :)
Die had ik nog niet gezien.
Gewijzigd op 28/08/2013 11:04:58 door Bart V B
http://dev.mysql.com/doc/refman/5.0/en/charset-column.html
Overigens vind ik het persoonlijk wel beter als de username insensitive is, maar het password niet (wat vaak al het geval is door hashing). Als ik bij aanmelden eens mijn email met een hoofdletter heb opgegeven wil ik dat later liever niet als een probleem hebben als ik eens met een kleine letter inlog.
En als je niet je hele database, danwel tabel case insensitive wil maken, kan je het ook per kolom doen: Overigens vind ik het persoonlijk wel beter als de username insensitive is, maar het password niet (wat vaak al het geval is door hashing). Als ik bij aanmelden eens mijn email met een hoofdletter heb opgegeven wil ik dat later liever niet als een probleem hebben als ik eens met een kleine letter inlog.
Op zich is het geen heel groot probleem, als ik een beetje door heb hoe laravel werkt en een echte applicatie ga maken dan zal de optie email met password dan ook wel het meest voor de hand liggen.
Het viel me gewoon op dat het zo is dat een database case insensitive is.
En onwetendheid kan eenmaal voor onnodig zoekwerk zorgen.
Dus vandaar dat ik het wilde weten hoe ik het zou kunnen oplossen.
Die hash je normaal gesproken niet.
Het wachtwoord heeft een hash in de database dus dat is/was het probleem niet.
Maar goed, alles hashen is niet bepaald efficiënt bij grote hoeveelheden data. Je kunt bij MySQL beter het sleutelwoord BINARY gebruiken voor een binaire vergelijking, zoals in SELECT BINARY. Binair zijn a en A namelijk ongelijk:
Het was een leerzame dag.
Bedankt voor jullie input allen.
Maak zeker dat je Hash::make($wachtwoord) gebruikt en een goede application key hebt als je Laravel 4 hebt.
Gewijzigd op 29/08/2013 01:12:38 door - Raoul -
De application key heb ik inderdaad nog niet ingesteld.
Had al wel gelezen dat die ingesteld moet worden.