Login ajax et Remember login password ?
0Chrome vous propose d’enregistre votre login / mot de passe quand vous submitez un form de connexion.
Typiquement il se base sur le fait qu’il y a un input text, suivi d’un input password.
Le problème est que si on souhaite logger un user sans rechargement de page, on passe par une requete ajax, et Chrome ne le detecte pas et donc n’enregistre pas les login / password du user.
Pour parer à ce problème, il faut absolument que le form soit submit ! En submitant le form, on recharge la page, ce que l’on ne veut pas. Il faut donc trouver un moyen pour submit sans recharger !
C’est possible ! L’attribut target dans la balise form et une iframe va nous aider à faire ce petit trick.
On place une iframe en display:none avec un id= »mon_iframe », et dans la balise form, target= »mon_iframe »
Dans le form on a normalement notre onsubmit= »ajaxLogin();return false; » => return false permettant de ne pas submit, on l’enleve car on veut submit !
Puis dans l’action du form, on renvois sur un page qui ne fait rien : action= »nothing.php ».
Avec tout ça mis en place, le formulaire va envoyer les données à l’adresse nothing.php et le resultat va s’afficher dans l’iframe, et la window ne va pas se recharger !
En parallele, le onsubmit est bien triggered, et notre call vers le login est bien lancé !
Finalement, Chrome (ou autre navigateur) voit l’action du submit de formulaire et propose donc bien d’enregistrer les login / password de l’user !!
<?php
if(isset($_POST['submit'])){
echo "true";
exit;
}
?><html>
<head>
<script type="text/javascript">
function ajaxSubmit(){
//ajax call
}
</script>
</head>
<body>
<div style="display:block;">
<form action="ajaxform.php" method="POST" onsubmit="ajaxSubmit();return true;" target="targetform">
<input type="text" name="blu" value=""/><br/>
<input type="password" name="blublu" value=""/><br/>
<input type="submit" name="submit" value="submit"/>
</form>
<iframe src="ajaxform.php" id="targetform" style="display:none;"></iframe>
</div>
</body>
</html>
Récuperer un fichier effacé sur Aptana / Eclipse
0Je viens de faire un svn delete sur un fichier que j’avais pas commit !
J’ai pas commit le delete… Ouf.. Eh bah pas ouf en fait, parce que svn delete s’occupe aussi de delete le fichier en local !! Mais pkoi ????
Et cherchez pas dans la corbeille, il y est pas !!
Et bien j’ai trouvé la solution ! Par hasard, et ca fait bien plaisir !!
Si votre fichier était ouvert dans Aptana, pas de soucis, il est toujours ouvert, et aptana vous demandera si il faut refresh car il a disparu. DITES NON bien sur…
Si par contre, il n’etait pas ouvert, il devrait toujours etre dans l’arbo d’aptana, et là il suffit de recreer le fichier vide (meme nom) dans le systeme de fichier de l’os, puis retourner sur Aptana, l’ouvrir, vous avez un fichier vide.
Là vous faites clic droit, « compare with » => « local history »
tinlin !!!!
A chaque enregistrement, Aptana / Eclipse enregistre une revision de fichier, c’est magique, ca ‘peut’ bouffer bcp d’espace, mais c’est quand meme super SAFE !!
ENFIN, si dans Aptana il n’existe plus ce ptit fichier, il reste toujours des revisions dans le workspace (normalement, ca j ai pas testé… mais ca devrait etre bon)
Une simple recherche sur du texte que vous avez ecrit, et vous retrouvez les revisions !
Bloquer tout le monde sauf un user – agent particulier
2Si comme moi, vous tentez d’intégrer un plugin facebook like alors que votre site est en développement et que par conséquent vous décidez de bloquer l’accès par un htaccess / htpasswd à tout le monde sauf les valid user,
Vous êtes alors confronté au même problème.
Comment faire pour tester l’affichage du like sur votre profil sans temporairement enlever la limite d’accès ?
En cherchant un peu dans les doc apache / htaccess, j’ai découvert qu’il était possible de bloquer certain utilisateur mais d’autoriser des machine sur des ip spécifiées.
Seulement, en regardant mes logs apache, le scrapper de Facebook n’utilise pas tout le temps la même IP mais elle commence apparemment toujours par :
69.63.180.*
Il est possible d’autoriser une classe d’ip comme ceci :
69.63.180.0/255
Pour mon test avec Facebook ca ne marchait pas, j’ai donc décider de trouver un moyen d’autoriser seulement facebook en matchant le user agent de son scrapper.
C’est donc FAISABLE !
Le user-agent du scrapper de facebook est :
« facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) »
(http://developers.facebook.com/docs/reference/plugins/like)
Pour ce faire, il faut dans le fichier htaccess, définir une variable « d’environnement » qui correspondra aux user agent qui matcheront avec l’expression régulière donnée :
SetEnvIfNoCase User-Agent « .*(facebookexternalhit).* » AllowedAgent
Nous pourrions utiliser SetEnvIf (le ‘NoCase’ correspond à case insensitive)
Et il suffit ensuite d’ajouter la ligne :
allow from env=AllowedAgent
Dans mon cas, j’ai décidé de bloquer tout le monde SAUF soit un utilisateur enregistré, SOIT facebook.
Il faut alors coupler deux types de sécurités:
1/ Bloquer tout le monde : Deny from all
2/ Autoriser les utilisateurs enregistrés (contenus dans le fichier htpasswd) :
require user user1 user2 user3
3/ Autoriser le user agent spécifié :
allow from env=AllowedAgent
4/ Informer à Apache qu’il suffit que l’une des deux conditions soit vérifié pour donner un accès (soit un user, soit le userAgent) :
Satisfy any
Finalement, le fichier htaccess ressemblera à ça :
SetEnvIfNoCase User-Agent ".*(facebookexternalhit).*" AllowedAgent AuthUserFile /path/to/.htpasswd AuthName "Veuillez vous identifier" AuthType Basic Satisfy any Order Deny,Allow Deny from all allow from env=AllowedAgent require user user1 user2 user3
Mes sources : (à lire ! C’est interressant !!)
Les bases du htaccess : http://lebrument.free.fr/wordpress/wordpressfr/?p=50
Plus complet mais en anglais : http://perishablepress.com/press/2006/01/10/stupid-htaccess-tricks/#security