如何使用sinatra创建登录表单

时间:2014-05-27 05:01:38

标签: ruby authentication sinatra rack slim-lang

我一直在寻找有关如何使用Sinatra创建简单登录表单的信息。我检查了Sinatra文档,我看到Rack可能需要实现,这很好。我正在谈论的文件中的代码是:

require 'sinatra'
use Rack::Auth::Basic, "Restricted Area" do |username, password|
    username == 'admin' and password == 'admin'
end

get '/' do
   "You're welcome"
end

当它实现时,它要求输入用户名和密码才能进入路由页面 我正在尝试做的是在索引页面上有一个表单,其中包含正常的用户名和密码以及提交按钮,一旦管理员或有效用户登录,他们就会进入下一页即应用程序。我正在使用的表单是使用Slim制作的,它将是应用程序的第一页:

  form#logger action="/login" method="post" name="logger" 
    tr
      p.logLabel Username
      input type="text" 
    tr
      p.logLabel Password
      input type="password" 
    tr
      input name="login" type="submit" value="Submit"  

感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

正如Rack::Auth::Basic docs所说,这个Rack中间件是RFC 2617的一个实现,描述了HTTP基本身份验证。由于这是在协议级别定义的,它完全由您的浏览器运行,但到目前为止还无法在对话框中添加任何样式。如果您选择此基本类型的身份验证(或Rack :: Auth :: Digest),那么这是您做出的权衡之一。不幸的是,随着BitCoin的出现,如果有足够的硬件,这个规范中使用的所有哈希算法现在都会“易碎”。

如果您需要更灵活(和安全)的登录程序,我想你应该看看Warden哪个是支持Devise的Rack中间件。这给了你更大的灵活性,但作为一种权衡,它还需要你做更多的工作。但这可能是您愿意为增加的安全性付出的代价。

还有sinatra_warden project提供了一些关于Warden如何在sinatra中使用的简单指南。

答案 1 :(得分:-1)

在Sinatra中,以简单方式使用用户身份验证并不容易。正如@Patru所说,你可以使用Warden,但权衡总是稍微大一点的代码库。使用Rack Auth可能是最简单,最干净的方式。其他解决方案包括由互联网上的许多大型网站提供的OAuth,例如Facebook,Google等。一旦启动自己的解决方案,您将需要使用某种数据库进行用户管理。硬编码密码可能不是最佳解决方案。我在我的应用中使用了一个相当简单的解决方案:https://github.com/burningTyger/farhang-app/blob/master/auth.rb还要查看它是如何在farhang.rb中集成到应用中的。只是一个想法。作为要点:https://gist.github.com/burningTyger/1443592

答案 2 :(得分:-1)

我昨天刚刚使用sinatra完成了我的第一个网络应用程序之一,并且执行一个验证用户名和密码的简单登录页面真的不是很复杂。在这里得到格式化的问题因此继承了我的github在webapp repo下的链接,任何问题只是问它非常自我解释,尽管大多数情况下验证代码都是从get' / login' https://github.com/josephmckenzie/webapp