lua redis字符串比较不起作用

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("错误的用户或服务未找到1510")
end

password = admin redisPassword = admin

我能看到两个密码的输出是admin,但在lua代码中不匹配,控制总是转到else部分。

当我像这样进行比较

if (tostring(password) == "admin")

它运作正常,这意味着问题是redis值但我已经在redis中设置了密码值admin。

点赞
用户1442917
用户1442917

我的理解是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)

来源自文档:

非nil Redis“multi-bulk reply”会产生一个包含所有组成值(如果有的话)的Lua表。如果任何组成值是有效的redis错误值,则它将是一个两个元素的表{false,err}。空的多数字典回复返回一个ngx.null值。

请注意,ngx.null值不同于Luanil值,因此您可能需要分别对其进行检查。

还要注意,您在两个不同的位置使用None作为变量和"None"作为字符串,这可能不会按您想要的方式执行。

2016-05-01 22:32:49