Ten doprowadza mnie do szału. Dezaktywuję użytkownika, zmieniając jego magazyn sesji w Redis. Najpierw znajduję klucz, zmieniam wartość i ustawiam nową wartość. Wszystkie odpowiedzi wskazują, że polecenia są wykonywane pomyślnie, ale redis-cli nie pokazuje żadnych zmian w tym kluczu.

// Update the Redis session

var client = redis.createClient();

var keys = await new Promise(function(resolve, reject) {
    client.keys('*', function(err, reply) {
        if(err) reject(err);
        resolve(reply);
    });
});

var data = await new Promise(function(resolve, reject) {

    keys.forEach(function(key) {

        resolve(new Promise(function(resolve, reject) {
            client.get(key, function(err, reply) {
                if(err) reject(err);

                var session = JSON.parse(reply);
                if(session.userId == userId) {
                    session.authenticated = false;
                    return resolve({key: key, value: JSON.stringify(session)});
                }
            });
        }));


    });

});

var reply = await new Promise(function(resolve, reject) {

    client.set(data.key, data.value, function(err, reply) {
        if (err) reject(err);
        resolve(reply);
    });

});
console.log(keys);
console.log(data);
console.log(reply);

Mimo że ustawiłem właściwość authentication na false dla tego klucza, nadal jest wyświetlana jako true z redis-cli. Dziennik z konsoli i odpowiedź pokazują, że polecenie się powiodło, ale tak nie jest. Jakieś pomysły?

Oto, co otrzymałem z redis-cli

127.0.0.1:6379> get sess:_xArN7ShiZRjyxbv_5xuh0FhTU6orlX5
"{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"loginFailed\":false,\"authenticated\":true,\"userId\":1"}"
0
SongAngel 19 listopad 2019, 20:39
Dodaj polecenie, którego używasz w redis-cli.
 – 
nurdyguy
19 listopad 2019, 20:43
Używam Get Keyname i pokazuje stringified JSON, a uwierzytelniona wartość jest nadal prawdziwa. Właściwie zrobiłem get po zakończeniu zestawu i pokazał fałszywy, ale nadal cli pokazało prawdę.
 – 
SongAngel
19 listopad 2019, 20:55
Czy możesz edytować pytanie i dodać konkretne polecenie, którego używasz, oraz przykład tego, jak wygląda wynik (część pliku json, która ma znaczenie). Ułatwi nam to dokładne sprawdzenie, co robisz.
 – 
nurdyguy
19 listopad 2019, 20:59
Dodałem odpowiedź, którą otrzymałem z redis-cli. Zasadniczo próbuję wylogować określonego użytkownika po dezaktywacji tego użytkownika.
 – 
SongAngel
19 listopad 2019, 22:12

1 odpowiedź

Ok, więc testowałem to na sobie, co nie działa, ponieważ wartość, którą ustawiłem, została nadpisana przez oprogramowanie pośredniczące sesji.

Również obietnice były wykonywane równolegle, a nie sekwencyjnie, więc zagnieżdżanie wywołań zwrotnych miało w tym przypadku większy sens i rozwiązało tę część problemu.

Mając nadzieję, że to pomoże komuś innemu.

0
SongAngel 20 listopad 2019, 00:46