2016-05-01 2 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 

пароля = админ redisPassword = админLua сравнение Redis строки не работает

я могу видеть, как пароль, как выходные админы, но это не соответствует в Lua коде и управлении всегда будет еще часть.

, когда я сравниваю, как этот

если (ToString (пароль) == «администратор»)

это работает отлично, что означает этот вопрос является со значением Redis, но я поставил значение пароля администратора в redis.

+0

Что содержит переменная 'None'? – user6245072

ответ

2

Я понимаю, что hmget возвращает multi-bulk reply, который имеет результат в таблице LUA, так что вы должны, вероятно, сделать что-то вроде этого:

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

Из documentation:

не- nil Redis «многовариантный ответ» приводит к таблице Lua, содержащей все составляющие значения (если они есть). Если какое-либо из составляющих значений является допустимым значением ошибки redis, то это будет таблица из двух элементов {false, err}. Нулевой многовалютный ответ возвращает значение ngx.null.

Обратите внимание, что значение ngx.null не то же самое, как nil значение Lua, поэтому вам может понадобиться, чтобы проверить, что отдельно.

Также обратите внимание, что вы используете None в качестве переменной и "None" как строку в двух разных местах, что может не делать то, что вы ожидаете.

+0

Awsome thanx @Paul – as1992

Смежные вопросы