Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Verification qui ne fonctionne pas #37

Open
lbopp42 opened this issue Oct 6, 2019 · 8 comments
Open

Verification qui ne fonctionne pas #37

lbopp42 opened this issue Oct 6, 2019 · 8 comments

Comments

@lbopp42
Copy link

lbopp42 commented Oct 6, 2019

Bonjour,
J'ai teste 3 sites de vote avec votre plugin et je n'arrive pas a passer l'etape de verification. Aucune erreur n'apparait mais le chargement de verification est infini. J'ai bien des vote/step/check avec le status 200.
Cordialement,
BOPP Lucas

@clementp06
Copy link

Même problème.

@MenFunDEV
Copy link

Pareil, quelqu'un à une solution ?

@ArtichautFR
Copy link

Même problème, je pense avoir compris d'où cela vient, mais je suis malheureusement incapable de résoudre ce problème...

En jetant un oeil dans la table des votes en bdd après avoir eu ce problème et il se trouve que l'IP récupérée par le votant était son IPv6. J'en déduis donc que le site de vote récupère l'IPv4 et le plugin de vote récupère l'IPv4 mais parfois l'IPv6, faussant donc la vérification de vote ^^

@MaximeMichaud
Copy link
Member

Oui, certains sites de vote ne supporte pas V6. Cela fait longtemps que je n'avais pas reflechis a ce problème.
Mettre son site en ipv4 semble être la façon la plus simple de résoudre ce problème. Après, le problème ne concernait pas tous les classements.

@Yeregorix
Copy link

Bonjour,

Je ne souhaitais pas passer mon site en ipv4. Premièrement parce que ce n'est pas une solution d'avenir, ipv6 est destiné à remplacer ipv4. Deuxièmement parce que certains sites de vote utilisent l'ipv6 et donc ce serait casser la compatibilité avec ces sites.

Certains sites de vote proposent des API pour vérifier les votes à partir du pseudo et non de l'IP, la solution la plus propre est d'utiliser ce type de vérification. Malheureusement ce n'est pas possible pour tous les sites. Il faut donc réussir à vérifier les votes pour l'ipv4 ET pour l'ipv6.

Je suis parvenu à une solution qui me convient et je vous la partage si ça peut aider.
Le nom de domaine hébergeant mon site est monsite.net (évidemment ce n'est pas son vrai nom). Il est compatible ipv4 et ipv6 (DNS A et AAAA).
J'ai ajouté des sous-domaines v4 et v6. Le premier est compatible uniquement ipv4 (DNS A), et l'autre uniquement ipv6 (DNS AAAA).

J'ai changé la fonction checkVote du frontend pour alterner entre les deux sous-domaines:

    function checkVote(ipv4 = true)
    {
        $.ajax({
            url: 'https://v' + (ipv4 ? '4' : '6') + '.monsite.net/vote/step/check',
            type : 'GET',
            dataType: 'JSON',
            crossDomain: false,
            xhrFields: {
                withCredentials: true
            },
            success: function(data) {
                if (data.status) {
                    if (!data.reward_later)
                        $('.get-reward[data-reward="later"]').remove()
                    next(3)
                } else {
                    setTimeout(() => {checkVote(!ipv4)}, 2500);
                }
            },
            error: function (xhr) {
                setTimeout(() => {checkVote(!ipv4)}, 2500);
            }
        });
    }

Afin de partager la session entre les sous-domaines, j'ai partagé les cookies dans les sous-domaines et autorisé les requêtes CORS (de manière restreinte) sur mon serveur Apache2:

        RewriteEngine On
        RewriteCond %{REQUEST_METHOD} OPTIONS
        RewriteRule ^(.*)$ $1 [R=200,L]

        Header always edit Set-Cookie (.*) "$1; Domain=monsite.net"
        Header always set Access-Control-Allow-Origin "https://monsite.net"
        Header always set Access-Control-Allow-Credentials "true"
        Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type"
        Header always set Access-Control-Max-Age "600"

C'est une solution expérimentale testée et fonctionnelle. Vous pouvez l'utiliser en tant que telle ou bien vous en inspirer pour trouver une solution plus simple peut être.

@MaximeMichaud
Copy link
Member

MaximeMichaud commented Nov 8, 2021

Cela va loin pour quelque chose qui aurait dû être supporter sur les classements initialement.
Honnêtement, même aujourd'hui, je ne suis pas réellement sûr de la solution parfaite qui irait avec tout.
Car le problème vient aussi de leur côté.

@Yeregorix
Copy link

Je suis d'accord qu'il s'agit de la responsabilité des sites de vote. Ma solution n'est qu'une astuce pour contourner le problème.
Pour moi le problème c'est le principe même d'utiliser l'IP. Si le site du serveur et le site de vote sont tous les deux compatibles ipv4 et ipv6, on n'aura jamais la certitude que la même IP a été utilisé pour les deux sites. A vrai dire quand l'ipv6 sera démocratisé (certainement pas d'ici demain) , il est très probable qu'un grand nombre d'utilisateur ai chacun plusieurs IPs.

@MaximeMichaud
Copy link
Member

Je suis d'accord qu'il s'agit de la responsabilité des sites de vote. Ma solution n'est qu'une astuce pour contourner le problème. Pour moi le problème c'est le principe même d'utiliser l'IP. Si le site du serveur et le site de vote sont tous les deux compatibles ipv4 et ipv6, on n'aura jamais la certitude que la même IP a été utilisé pour les deux sites. A vrai dire quand l'ipv6 sera démocratisé (certainement pas d'ici demain) , il est très probable qu'un grand nombre d'utilisateur ai chacun plusieurs IPs.

Malheureusement IPV6 c'est un rêve mort née. IPV6 ne fixe rien, et ne remplace donc aucunement IPV4.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

6 participants