Connecter en activant une session
Comment connecter quelqu'un en lui créant une session ?
Support Général
ecoloonline Membre non connecté
Booster Bazooka
-
Booster Bazooka
- Voir le profil du membre ecoloonline
- Inscrit le : 05/12/2009
- Site internet
Je souhaite pouvoir connecter un utilisateur sans qu'il aie besoin de rentrer son mot de passe. Pour cela je souhaite lui créer une session.
Dans mon module facebook connect je récupère l'email de l'utilisateur qui souhaite se connecter avec facebook.
Est-il possible de créer une session à celui-ci si il est déjà enregistré sur le site ?
Je demande ça parce-que aujourd'hui je connecte les utilisateurs facebook avec un mot de passe prédéfini que je connais.
Comme ceci :
Code PHP :
AppContext::get_session()->connect($fb['username'], $password, 0);
C'est le moyen le plus simple que j'ai eu pour créer une session, y aurait-il un autre moyen qui me permette de ne pas utiliser de mot de passe ?
Merci.
<img alt="" src="http://www.chaudron-empoisonne.fr/pages.php?id=ecoloonline">
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
ecoloonline Membre non connecté
Booster Bazooka
-
Booster Bazooka
- Voir le profil du membre ecoloonline
- Inscrit le : 05/12/2009
- Site internet
<img alt="" src="http://www.chaudron-empoisonne.fr/pages.php?id=ecoloonline">
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Tu créer une fonction connect :
Code PHP :
public function connect($login, $password, $autoconnexion, $url_to_redirect = '', $already_hashed = false) { $sql = PersistenceContext::get_sql(); $user_id = $sql->query("SELECT user_id FROM " . DB_TABLE_MEMBER . " WHERE login = '" . $login . "'", __LINE__, __FILE__); if (!empty($user_id)) //Membre existant. { $info_connect = $this->sql->query_array(DB_TABLE_MEMBER, 'level', 'user_warning', 'last_connect', 'test_connect', 'user_ban', 'user_aprob', 'password', "WHERE user_id='" . $user_id . "'", __LINE__, __FILE__); $delay_connect = (time() - $info_connect['last_connect']); //Délai entre deux essais de connexion. $delay_ban = (time() - $info_connect['user_ban']); //Vérification si le membre est banni. if ($delay_ban >= 0 && $info_connect['user_aprob'] == '1' && $info_connect['user_warning'] < '100') //Utilisateur non (plus) banni. { if ($delay_connect >= 600) //5 nouveau essais, 10 minutes après. { $sql->query_inject("UPDATE " . DB_TABLE_MEMBER . " SET last_connect='" . time() . "', test_connect = 0 WHERE user_id = '" . $user_id . "'", __LINE__, __FILE__); //Remise à zéro du compteur d'essais. $error_report = AppContext::get_session()->start($user_id, $password, $info_connect['level'], REWRITED_SCRIPT, '', '', $autoconnexion, $already_hashed); //On lance la session. } elseif ($delay_connect >= 300) //2 essais 5 minutes après { $sql->query_inject("UPDATE " . DB_TABLE_MEMBER . " SET last_connect='" . time() . "', test_connect = 3 WHERE user_id = '" . $user_id . "'", __LINE__, __FILE__); //Redonne 2 essais. $error_report = AppContext::get_session()->start($user_id, $password, $info_connect['level'], REWRITED_SCRIPT, '', '', $autoconnexion, $already_hashed); //On lance la session. } elseif ($info_connect['test_connect'] < 5) //Succès. { $error_report = AppContext::get_session()->start($user_id, $password, $info_connect['level'], REWRITED_SCRIPT, '', '', $autoconnexion, $already_hashed); //On lance la session. } else //plus d'essais { AppContext::get_response()->redirect(UserUrlBuilder::connect('flood')->absolute()); } } elseif ($info_connect['user_aprob'] == '0') { AppContext::get_response()->redirect(UserUrlBuilder::connect('not_enabled')->absolute()); } elseif ($info_connect['user_warning'] == '100') { AppContext::get_response()->redirect(UserUrlBuilder::connect('banned')->absolute()); } else { $delay_ban = ceil((0 - $delay_ban)/60); AppContext::get_response()->redirect(UserUrlBuilder::connect('banned', $delay_ban)->absolute()); } if (!empty($error_report)) //Erreur { $sql->query_inject("UPDATE " . DB_TABLE_MEMBER . " SET last_connect='" . time() . "', test_connect = test_connect + 1 WHERE user_id='" . $user_id . "'", __LINE__, __FILE__); $info_connect['test_connect']++; $info_connect['test_connect'] = 5 - $info_connect['test_connect']; AppContext::get_response()->redirect(UserUrlBuilder::connect('flood/'. $info_connect['test_connect'])->absolute()); } elseif ($info_connect['test_connect'] > 0) //Succès redonne tous les essais. { $sql->query_inject("UPDATE " . DB_TABLE_MEMBER . " SET last_connect='" . time() . "', test_connect = 0 WHERE user_id = '" . $user_id . "'", __LINE__, __FILE__); //Remise à zéro du compteur d'essais. } } else { AppContext::get_response()->redirect(UserUrlBuilder::connect('unexisting')->absolute()); } if (!empty($url_to_redirect)) { AppContext::get_response()->redirect($url_to_redirect); } AppContext::get_response()->redirect(Environment::get_home_page()); }
Ensuite tu récupères ton membre en base de données et tu le connectes avec la fonction connect en utilisant le paramètre $already_hashed à true.
Dans la 4.1, j'ai fais une légère modification pour que tu n'es pas besoin de faire cette fonction là.
PS : après la 4.1, il est prévu de refondre le système de session pour y ajouter la possibilité de faire une connexion via Facebook par exemple.
ecoloonline Membre non connecté
Booster Bazooka
-
Booster Bazooka
- Voir le profil du membre ecoloonline
- Inscrit le : 05/12/2009
- Site internet
Je vais utiliser ta fonction comme tu m'as dit
Elle peut prendre en paramètre des mots de passe déjà hashés si le dernier paramètre passé est à 'true' ?Que comptes-tu faire au niveau dev pour qu'on aie la possibilité d'avoir une connexion par Facebook ? histoire que j'oriente mon développement en conséquence.
<img alt="" src="http://www.chaudron-empoisonne.fr/pages.php?id=ecoloonline">
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie