为什么每当我输入正确的密码时,这总是说不正确?

时间:2015-06-22 18:27:31

标签: ruby authentication sinatra

为什么即使输入正确的密码,它也说错了。当我比较2个密码时,它说它们是相同的但是当我尝试登录时,它说我的密码错了? BTW密码来自我在文件中的哈希。

post "/login" do
   username = "#{params[:username]}"
   #password = Digest::SHA256.hexdigest(Digest::SHA256.hexdigest("#{params[:password]}"))
   password ="#{params[:password]}"
   puts(password)
   $users=eval(IO.read("users.emy"))
   puts($users.values_at(username))
   puts($users.to_s)
   if $users.values_at(username)!=password
     puts "Wrong password!"
     redirect "/"
   end
   if $users.values_at(username)==password
     redirect "/dash"
   end
end

1 个答案:

答案 0 :(得分:1)

由于您要比较字符串,因此您应该使用类似

的内容
unless $users[username].eql? password
  puts "Wrong password!"
  redirect "/"
end
if $users[username].eql? password
  redirect "/dash"
end

#values_at返回一个数组。见:#values_at。由于params[:password]应该是一个字符串,我相信这就是你想要的。

我在这里做了很多假设,因为我不知道users.emy的格式。如果我在某处做出了错误的假设,请告诉我。

旁注,

username = "#{params[:username]}"
password = "#{params[:password]}" 

可以写成

username = params[:username]
password = params[:password] 

或仅用作params[:username]params[:password]