Bonjour,
J'essaie de demander une action particulière si un utilisateur spécifique qui se connecte.
Dans les faits, je souhaite une première "barriere sécurité": j'ai créé un identifiant que je donnerais personnellement à ceux qui auront le droit de se connecter à mon site. Et ce, pour être sûr que seules les personnes choisies (que je connais personnellement) s'inscrivent. Je l'ai nommé "bienvenue".
Je souhaite que les personnes se connectant à ce compte (donc ayant le login et le mot de passe) soient directement redirigées sur la page "register" afin qu'ils puissent créer leur propre login et mot de passe.
Seulement, j'émais beaucoup de difficulté à cause de mon très faible niveau en programmation. Je n'ai pas de message d'erreur, mais ça ne redirige rien:
voilà ce que j'ai fait sur ma page "default":
require_once CORE.DS.'func.php';
if(isset($_SESSION['auth'])){
require ROOT.DS.'view'.DS.'pages'.DS.'actu.php';
}else{
/**
* partie se connecter
**/
if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])){
require_once CORE.DS.'db.php';
$req = $pdo->prepare('SELECT * FROM users WHERE (username = :username OR email = :username) AND confirmed_at IS NOT NULL');
$req->execute(['username' => $_POST['username']]);
$user = $req->fetch();
if(password_verify($_POST['password'], $user->password)){
$_SESSION['auth'] = $user;
$_SESSION['flash']['defaut'] = 'Vous êtes maintenant connecté';
$userFirst = $this->User = 'bienvenue';
if($_SESSION['auth'] = $userFirst){
header('Location: http://localhost:8080/.../pages/register');
$_SESSION['flash']['success'] = 'Merci de vous enregistrer';
}
Sachantque je fais une erreur dans la logique, j'ai essayé d'autres façon, et rien ne se passe.
Il y aurait-il quelqu'un qui pourrait m'aiguiller ? ou peux -t-être une autre façon de procéder pour arriver à un résultat sensiblement pareil à ce que je souhaite ?
Merci de votre aide.
ça ne saurai pas plutôt ceci:
if($_SESSION['auth']->username == 'bienvenue'){
header('Location: http://localhost:8080/.../pages/register');
exit();
}
Ce n'est pas possible l'égalité que tu demandes, étant donné que tu lui demandes de comparer une chaîne de caractères avec un objet.
Il te faut plutôt faire :
if ($_SESSION['auth']->username == $userFirst) {
header('Location: http://localhost:8080/.../pages/register');
exit();
}
Par contre, avec ton code actuel, tous les utilisateurs auront bienvenue comme username.
Bonjour,
Tu peux tout simplement gérer les différents cas avec des if (ou dans l'idée où il y a plusieurs cas tu peux utiliser des switch). De cette façon tu peux tester les logins qui ont le droit ou non de se connecter.
En espérant que ça puisse t'aider, peut être que j'ai mal compris ta question.
Bonjour, merci de ta réponse.
C'est justement ce que j'essaie de faire avec
$userFirst = $this->User = 'bienvenue';
if($_SESSION['auth'] = $userFirst){
header('Location: http://localhost:8080/.../pages/register');
$_SESSION['flash']['success'] = 'Merci de vous enregistrer';
Mais visiblement, je ne parviens pas à rediriger. Où est mon erreur ?
En PHP pour tester l'égalité de deux variable il faut mettre deux égal (ou 3 pour dire "strictement égal à..", mais dans ton cas 2 égal suffissent).
<?php
if($_SESSION['auth'] = $userFirst){ //Ici il faut mettre un autre égal :D
?>
Ha oui ! j'en ai oublié un. Mais je n'ai pas de redirection... il doit se cacher une autre erreur..
En faisant un var_dump de $_session, il me sort ceci:
array (size=2)
'auth' =>
object(stdClass)[14]
public 'id' => string '6' (length=1)
public 'login' => null
public 'username' => string 'bienvenue' (length=9)
public 'email' => string 'serveur@johuv.fr' (length=16)
public 'password' => string '$2y$10$QUG7eNffRYMPD8flyK4W6uXsWaX27.DLYB/Bg68T/N8MGukJBA.aq' (length=60)
public 'role' => string 'invitealaconnection' (length=19)
public 'confirmation_token' => string 'R8IVPjpoGgFw3ulq0HtjVwB7fl4HzuGaFAlFsGT01bYre3KJR13Ur2GUhrJT' (length=60)
public 'confirmed_at' => string '2017-07-16 00:00:00' (length=19)
public 'reset_at' => null
public 'reset_taken' => string '' (length=0)
public 'remember_token' => string 'R8IVPjpoGgFw3ulq0HtjVwB7fl4HzuGaFAlFsGT01bYre3KJR13Ur2GUhrJT' (length=60)
'flash' =>
array (size=1)
'defaut' => string 'Vous êtes maintenant connecté' (length=31)
Il me sort ce qu'il faut depuis le phpmyadmin...
Je peux en conclure que mes lignes
$userFirst = $this->User = 'bienvenue';
if($_SESSION['auth'] = $userFirst){
header('Location: http://localhost:8080/.../pages/register');
$_SESSION['flash']['success'] = 'Merci de vous enregistrer';
}
sont fausses ou/et ne sont pas traitées... là je sèche !
Bonsoir,
1/ Une comparaison se fait toujours par == ou === .
2/ Il vaut mieux éviter de mettre du code après un header("Location....."); car le code qui suit ne sera pas éxécuter.
C'est pour cela qu'on met un exit(); juste après.
Bonsoir.
Ta dernière condition, soit : if($_SESSION['auth'] = $userFirst){
ne sera jamais valide étant donné que l'index auth de ta session contient un objet alors que ta variable userFirst
contient une chaîne de caractères (string).
De ce fait, la redirection ne peut pas être prise en compte.
Après un dernier
if($_SESSION['auth'] == 'bienvenue'){
header('Location: http://localhost:8080/.../pages/register');
exit();
}
je ne vois comment remédier.
Selon toi , Lartak, quelle doit être la forme ?
Je veux que "si 'auth' = 'bienvenue', alors 'register.php'
Je suis totalement perdu...
Merci mille fois à vous deux ! Je tournais autour de la solution et vous m'avez fait comprendre ce soucis et résolu un problème qui me taraude depuis plus de 8 jours !
La solution est
if($_SESSION['auth']->username == 'bienvenue'){
header('Location: http://localhost:8080/.../pages/register');
exit();
}
Vous êtes au top !