2016-05-01 14 views
1
local password = json_string["password"] or "None" 
local redisPassword = red:hmget(userName,"password") or None 
local redisAuthtoken = red:hmget(userName,"authToken") 
if (tostring(password) == tostring(redisPassword)) 
then 
    ngx.say(redisAuthtoken) 
else 
    ngx.say("Error User or Service Not found 1510") 
end 

Passwort arbeiten = admin redisPassword = adminlua redis String-Vergleich nicht

ich bin der Lage, sowohl Passwort als Ausgabe Admin zu sehen, aber es ist nicht passend in lua-Code und Kontrolle immer zu anderen Teil gehen.

, wenn ich wie diese mit dem redis Wert

if (tostring (Passwort) == „admin“) ist

es funktioniert gut was bedeutet, das Problem bin im Vergleich, aber ich habe Kennwort Wert Admin gesetzt in redis.

+0

Was enthält die Variable 'None'? – user6245072

Antwort

2

Mein Verständnis ist, dass hmgetmulti-bulk reply Renditen, die das Ergebnis in einer Lua-Tabelle hat, so dass Sie wahrscheinlich etwas tun sollen:

local res, err = red:hmget(userName,"password") 
local redisPassword 
if res and res ~= ngx.null then redisPassword = res[1] end 
ngx.say(redisPassword) 

Vom documentation:

ein nicht nil Redis "Multi-Bulk-Antwort" ergibt eine Lua-Tabelle mit allen zusammengesetzten Werten (falls vorhanden). Wenn einer der zusammensetzenden Werte ein gültiger redis-Fehlerwert ist, handelt es sich um eine Zwei-Elemente-Tabelle {false, err}. Eine Antwort ohne Multi-Bulk antwortet in einem ngx.null-Wert.

Beachten Sie, dass ngx.null Wert ist nicht das gleiche wie Lua nil Wert, so dass Sie für das separat prüfen benötigen.

Beachten Sie auch, dass Sie None als eine Variable und "None" als eine Zeichenfolge an zwei verschiedenen Orten verwenden, die möglicherweise nicht das tun, was Sie erwarten.

+0

Awsome thanx @Paul – as1992