Je recherche l'API qui me permettra de connecter un utilisateur en lui transmettant le nom d'utilisateur et le mot de passe. Est-ce que quelqu'un a de l'expérience avec ça?
Pour clarifier les choses, j'essaie de créer une boîte de connexion AJAX qui s'affiche sous forme de fenêtre contextuelle sur la page d'accueil et de ne pas actualiser la page en cas d'informations erronées, mais uniquement si la connexion est correcte. Alors voici ce que j'ai fait jusqu'à présent:
Mise à jour
Je charge maintenant le formulaire de connexion sur ma page d'accueil, puis lors de la soumission, je lance une demande AJAX qui envoie les informations d'identification à ce script:
function user_login_submit_try() {
global $user;
$uid = user_authenticate($_POST['name'],$_POST['pass']);
$arr = array ('name'=>$_POST['name'],'pass'=>$_POST['pass']);
if ($uid){
$user = user_load($uid);
user_login_finalize($arr);
}
echo drupal_json_encode($uid);
exit;
};
Jusqu'à présent, cela fonctionne, mais mes inquiétudes sont (comme mentionné par googletorp) des problèmes de sécurité; il semble qu'aucune des API que j'ai utilisées dans ce script ne désinfecte les données de toute façon.
Quelqu'un verrait-il un meilleur moyen de le faire?
Réponses:
Cela pourrait aider quelqu'un:
Une meilleure version basée sur le commentaire:
la source
hook_user_insert
mais les fonctions ci-dessus dans la réponse veulent le mot de passe comme texte brut d'origine. J'imagine que je vais devoir essayer à lahook_form_alter
place ...Il n'y a pas une fonction API simple pour cela.
Vous pouvez faire ce que Drupal fait:
Écraser le
global $user
.Gérer les sessions
Pour les étapes deux et 3, voir
user_login_submit()
Toutes ces fonctions sont basées sur l’appel depuis un formulaire. Le flux normal est que les gestionnaires de validation testent l'entrée de l'utilisateur et renvoient l'identifiant de l'utilisateur si la validation réussit. Le gestionnaire d'envoi gère ensuite la connexion réelle de l'utilisateur et le raccordement de l'utilisateur appelant.
la source
$form_state['value']['name'] = $_POST['name']
$form_state
variable. Il existe de nombreuses vérifications de sécurité intéressantes que vous auriez sinon perdues et qui pourraient permettre à votre site d’être attaqué. Lorsque vous vous connectez à un utilisateur, vous ne voulez pas perdre cette sécurité.Si vous devez obtenir l'objet utilisateur du compte d'utilisateur pour lequel vous connaissez le nom d'utilisateur et le mot de passe, vous pouvez utiliser le code suivant:
$account
seraFALSE
si l'objet utilisateur ne peut pas être trouvé ou chargé.Vous devez utiliser ce code lorsque, par exemple, votre module obtient le nom d'utilisateur et le mot de passe saisis par un utilisateur, vérifie s'ils sont corrects et effectue ensuite quelque chose avec l'objet utilisateur.
Si vous écrivez un module qui doit emprunter l'identité d'un utilisateur pour rédiger un commentaire, ou effectuez une autre opération qui doit être effectuée par un utilisateur, comme le fait le module de suivi des problèmes de Project lors de la fermeture d'un rapport de problème figurant dans le dossier. statut fixe pendant deux semaines (dans ce cas, il ajoute le commentaire "Fermé automatiquement - problème résolu pendant deux semaines sans activité" avec les résultats écrits par l'utilisateur "Message système"), vous n'avez pas besoin de nom d'utilisateur ni de mot de passe. Vous venez de charger l'objet utilisateur pour lequel vous connaissez l'ID utilisateur.
Autant que je sache, le code que j'ai rapporté ne présente aucun problème de sécurité.
Vous voudrez peut-être limiter le nombre de connexions échouées; ou de bloquer temporairement l'IP qui tente de se connecter sans succès ou tente plusieurs connexions en peu de temps.
la source
Ce code fonctionne vraiment
la source
Réponse nettoyée de ce qui précède. La vérification de l'utilisateur et du mot de passe est une fonctionnalité supplémentaire. De plus, le faux état de formulaire doit être une variable à transmettre par référence à la fonction ou une erreur est générée.
Nous avons donc:
la source
L'utilisateur recevra la session et sera également connecté à d'autres pages:
la source
Parfois, nous avons besoin d'une connexion rapide à partir d'une URL ou d'un mot de passe administrateur oublié. Il vous suffit de mettre en œuvre ci-dessous deux fonctions pour vous connecter en tant qu'utilisateur 1 dans Drupal.
la source