Authentication 用户身份验证Bcrypt和Sinatra-链接-需要帮助解释

Authentication 用户身份验证Bcrypt和Sinatra-链接-需要帮助解释,authentication,encryption,sinatra,haml,bcrypt-ruby,Authentication,Encryption,Sinatra,Haml,Bcrypt Ruby,简单漂亮的Sinatra BCrypt身份验证系统-我希望您能解释一下=) 我发现这篇非常好的文章是关于一个非常简单的身份验证系统的,这个系统是使用BCrypt为Sinatra开发的,我认为它很棒,也很简单,有一个很好的经典代码 然而,我很难理解它,是的,我是一个傻瓜。如果你们中的一些人能向我解释至少一些代码,我会非常感激,我特别感兴趣的是这一部分 post "/signup" do password_salt = BCrypt::Engine.generate_salt passwor

简单漂亮的Sinatra BCrypt身份验证系统-我希望您能解释一下=) 我发现这篇非常好的文章是关于一个非常简单的身份验证系统的,这个系统是使用BCrypt为Sinatra开发的,我认为它很棒,也很简单,有一个很好的经典代码

然而,我很难理解它,是的,我是一个傻瓜。如果你们中的一些人能向我解释至少一些代码,我会非常感激,我特别感兴趣的是这一部分

post "/signup" do
  password_salt = BCrypt::Engine.generate_salt
  password_hash = BCrypt::Engine.hash_secret(params[:password], password_salt)

  #ideally this would be saved into a database, hash used just for sample
  userTable[params[:username]] = {
    :salt => password_salt,
    :passwordhash => password_hash 
  }

  session[:username] = params[:username]
  redirect "/"
end

post "/login" do
  if userTable.has_key?(params[:username])
    user = userTable[params[:username]]
    if user[:passwordhash] == BCrypt::Engine.hash_secret(params[:password], user[:salt])
      session[:username] = params[:username]
      redirect "/"
    end
  end
  haml :error
end
考虑到代码是由在这方面比我优秀得多的人编写的,我想代码没有任何问题,但它可能包含错误,但很可能不会。由于我对Sinatra和BCrypt的使用都很陌生,如果有人能解释一下这个过程以及它加密密码的方式,我将不胜感激

当您访问链接时,所有其余的代码都在那里,没有必要将它们全部粘贴到这里


此外,我认为如果我正确理解了BCryptEngine从用户param:password创建salt,但我无法理解它如何将用户保存到表中以及所有其他内容。谢谢:)

如果你想实现这样的东西,你至少应该了解你在做什么,而不是简单地在这里问。有一些简单的事情正在进行,比如将用户数据保存在一个散列中,而该散列不在请求之间保留,因此,除非您知道用户数据存储在何处,否则实现该散列是没有意义的。数据库可能是目前最好的答案

salt不是从用户密码创建的,它是由BCrypt生成并存储在userTable散列中。以及哈希密码。在注册例程中,userTable获得一个包含新用户的条目,但除非您将该散列保存在某个地方,否则在下一个请求后它将丢失

我建议首先阅读Ruby的基本用法。如果你想在你的应用程序中实现安全性,了解你在做什么是有意义的。否则,如果安全是安全的,这或多或少是纯粹的机会