Bonjour à tous,
Je suis confronté à un problème que je n'arrive pas à résoudre et qui en soit ne doit pas être bien compliqué...je vais essayer d'être le plus clair possible.
Je suis garant d'un site qui est fait sous Wordpress et relié à une API et il y a une zone membre (des chauffeurs).
Pour se connecter en tant que chauffeur, via un formulaire en modal, cette API requiert dans un premier temps une authentification via un JWT. Une fois le JWT récupéré en AJAX, on le décode et on fait un call pour récupérer les données du chauffeur via son ID avec mail, mot de passe et rôle accessoirement. Une fois récupéré on a une fonction PHP pour vérifier les infos et se connecter.
Aujourd'hui, je dois récupérer un code qui est associé au profil du chauffeur (à son ID) et l'afficher sur une page une fois que le chauffeur est connecté donc.
Voici la fonction Javascript pour se logger :Ici, la fonction PHP login_driver :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77 function login(email, pass) { $.ajax({ "async": true, "crossDomain": true, "url": "https://auth-service-prod.yuso-platform.com/driver/auth", "method": "POST", "headers": {"Content-Type": "application/json"}, "processData": false, "data": "{\n \"email\": \"" + email + "\",\n \"password\": \"" + pass + "\"\n}", success: function (response, statut) { var jwt = response['jwt']; var decoded = jwt_decode(response['jwt']); var iddriver = decoded['driver']['id']; $.ajax({ "async": true, "crossDomain": true, "url": "https://api.yusofleet.com/api/v3/drivers/" + iddriver, "method": "GET", "headers": {"Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET,POST,PUT,DELETE,OPTIONS", "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With", "Authorization": jwt, }, success: function (res, statut) { var firstname = res['first_name']; var lastnanme = res['last_name']; var code = res['referral_code']; var role = "driver_berline"; var is_berline = 0; var is_zoe = 0; for (var i = 0; i < res['available_vehicles'].length; i++) { if (res['available_vehicles'][i]['model'] == 'zoe') { is_zoe++; } else { is_berline++; } } if (is_berline > 0 && is_zoe > 0) { role = "driver_berlinezoe"; } else if (is_berline > 0 && is_zoe == 0) { role = "driver_berline"; } else if (is_berline == 0 && is_zoe > 0) { role = "driver_zoe"; } $.ajax({ url: postmarcel.ajax_url, type: 'post', data: { action: 'login_driver', email: email, pass: pass, firstname: firstname, lastnanme: lastnanme, codeParrain: code, role: role}, success: function (response) { if (response.data) { $(".code").html("<p>" + code + "</p>"); if (response.data.location) $(".form-login-pass-driver").css('display', 'none'); $(".form-login-pass-success").html('<p class="modal-title">Redirection en cours...</p><center> Connexion à votre espace chauffeur</center>'); window.setTimeout(function () { location.replace(response.data.location); }, 1000); } else { $(".form-login-pass-driver #bloc_error").html("<p>" + response + "</p>").css("display", "block"); } } }); }, error: function (res, statut, erreur) { $(".form-login-pass-driver #bloc_error").html("<p>Une erreur s'est produite, veuillez réessayer.</p>"); } }); }, error: function (response, statut, erreur) { $(".form-login-pass-driver #bloc_error").html("<p>Email et/ou mot de passe saisi incorrect, veuillez vérifier et réessayer</p>"); } }); }J'arrive à récupérer le code et l'afficher mais en renseignant manuellement le mail et mot de passe d'un compte comme ce que j'ai fait ci-dessous.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 add_action('wp_ajax_nopriv_login_driver', 'login_driver'); add_action('wp_ajax_login_driver', 'login_driver'); function login_driver() { $email = $_POST['email']; $pass = $_POST['pass']; $firstname = $_POST['firstname']; $lastnanme = $_POST['lastnanme']; $role = $_POST['role']; $userobj = new WP_User(); $user = $userobj->get_data_by('email', $email); $user = new WP_User($user->ID); if ($user->ID == 0) { $userdata = array('user_email' => $email, 'user_login' => $email, 'user_pass' => $pass, 'role' => $role, 'first_name' => $firstname, 'last_name' => $lastnanme); $new_user_id = wp_insert_user($userdata); $creds = array( 'user_login' => $email, 'user_password' => $pass, 'remember' => true ); $user = wp_signon($creds, false); if (is_wp_error($user)) { echo $user->get_error_message(); } else { $data = array('location' => esc_url_raw('/profil-chauffeur/')); wp_send_json_success($data); } } else { $user_id = wp_update_user(array('ID' => $user->ID, 'user_pass' => $pass, 'role' => $role, 'first_name' => $firstname, 'last_name' => $lastnanme)); $creds = array( 'user_login' => $email, 'user_password' => $pass, 'remember' => true ); $user = wp_signon($creds, false); if (is_wp_error($user)) { echo $user->get_error_message(); } else { $data = array('location' => esc_url_raw('/profil-chauffeur/')); wp_send_json_success($data); } } }
L'idée serait donc de faire la même chose mais il faut que ce soit avec l'ID du chauffeur connecté. Je suis débutant dans ce domaine et j'ai retourné le problème mais je ne trouve pas.
Je remercie d'avance les personnes qui voudront bien m'aider à résoudre ce problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 <script> var settings = { "async": true, "crossDomain": true, "url": "https://auth-service-prod.yuso-platform.com/driver/auth", "method": "POST", "headers": { "Content-Type": "application/json" }, "processData": false, "data": "{\n \"email\": \"laetitia.tubery@gmail.com\",\n \"password\": \"laetitiaTEST\"\n}" } $.ajax(settings).done(function (response) { console.log(response); console.log(response['jwt']); var token = response['jwt']; var decoded = jwt_decode(response['jwt']); console.log(decoded); var iddriver = decoded['driver']['id']; console.log(iddriver); var set = { "async": true, "crossDomain": true, "url": "https://api.yusofleet.com/api/v3/drivers/"+iddriver, "method": "GET", "headers": { "Authorization": response['jwt'], } } $.ajax(set).done(function (res) { console.log(res); $('.code').html('<p>' + res.referral_code + '</p>'); console.log(res.referral_code); }); }); </script>
Partager