Submitted by Wayode on
Bonjour,
J'aimerai savoir si quelqu'un pourrai m'aiguiller dans l'altération du formulaire de login de Drupal.
J'aimerai lors de la phase de login, pour un utilisateur existant, lui proposer de rentrer son adresse e-mail avant de l'identifier, si jamais celui-ci ne l'a pas déjà fait.
Merci d'avance.
Wayode.
en espérant ne pas dire de
Permalien Soumis par benfarhat le 29 Avril, 2011 - 11:58
en espérant ne pas dire de bétise
il y a cette fonction qui te permet de rediriger ta page de login
<?php
function user_login_destination() {
$destination = drupal_get_destination();
if ($destination['destination'] == 'user/login') {
$destination['destination'] = 'user';
}
return $destination;
}
toi tu doit rediriger vers la page contenant ton formulaire pour pour prélever l'adresse email
ensuite tu as une pile de fonction lié à l'authentification, ca pourrait être une piste vers ce que tu désires
tu modifies / surcharge la fonction de validation de l'authentification en lui rajoutant une variables qui est à TRUE si le mail est correct et à FALSE sinon
un truc dans cette fonction la:
function user_login_authenticate_validate($form, &$form_state) {
$password = trim($form_state['values']['pass']);
if (!empty($form_state['values']['name']) && !empty($password)) {
// Do not allow any login from the current user's IP if the limit has been
// reached. Default is 50 failed attempts allowed in one hour. This is
// independent of the per-user limit to catch attempts from one IP to log
// in to many different user accounts. We have a reasonably high limit
// since there may be only one apparent IP for all users at an institution.
if (!flood_is_allowed('failed_login_attempt_ip', variable_get('user_failed_login_ip_limit', 50), variable_get('user_failed_login_ip_window', 3600))) {
$form_state['flood_control_triggered'] = 'ip';
return;
}
$account = db_query("SELECT * FROM {users} WHERE name = :name AND status = 1", array(':name' => $form_state['values']['name']))->fetchObject();
if ($account) {
if (variable_get('user_failed_login_identifier_uid_only', FALSE)) {
// Register flood events based on the uid only, so they apply for any
// IP address. This is the most secure option.
$identifier = $account->uid;
}
else {
// The default identifier is a combination of uid and IP address. This
// is less secure but more resistant to denial-of-service attacks that
// could lock out all users with public user names.
$identifier = $account->uid . '-' . ip_address();
}
$form_state['flood_control_user_identifier'] = $identifier;
// Don't allow login if the limit for this user has been reached.
// Default is to allow 5 failed attempts every 6 hours.
if (!flood_is_allowed('failed_login_attempt_user', variable_get('user_failed_login_user_limit', 5), variable_get('user_failed_login_user_window', 21600), $identifier)) {
$form_state['flood_control_triggered'] = 'user';
return;
}
}
// We are not limited by flood control, so try to authenticate.
// Set $form_state['uid'] as a flag for user_login_final_validate().
$form_state['uid'] = user_authenticate($form_state['values']['name'], $password);
}
}
?>
cherches sur api.drupal.org le terme login
http://api.drupal.org/api/search/7/login
sinon comme article qui pourrais (je l'espère) t'intérésser:
http://drupal.org/node/258739
et comme module qui pourrais faire ce que tu demandes (c'est con j'aurais du mettre ca avant :)
http://drupal.org/project/logintoboggan
bonne chance :)