未找到sinatra身份验证路由

时间:2012-05-22 20:26:01

标签: authentication routes sinatra

我正在尝试将sinatra身份验证gem添加到Sinatra应用程序中,虽然它在那里并且做了部分事情,但由于某种原因,这些路线似乎没有被添加。代码基础:

require 'sinatra'
require 'digest/sha1'
require 'rack-flash'
require 'mongo_mapper'
require 'sinatra-authentication'

MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017, :pool_size => 5, :pool_timeout => 5)
MongoMapper.database = 'cms'

module CmsMod
  class CmsApp < Sinatra::Base
    use Rack::Session::Cookie, :secret => 'something secret'
    use Rack::Flash

    get '/' do
      #redirect to('/list') # commented out for testing
    end

    get '/private' do
      login_required
      'Protected Page'
    end

然后是剩下的事情。症状是指向浏览器到我的正常路线工作正常。转到'/ private'可以正确地重定向到'/ login',但我得到旧的“Sinatra不知道这个小曲”的消息;如果我尝试直接访问'/ login'也一样。我尝试使用'binding.pry'来检查get块中的内容,以及我可以告诉路由不存在的内容。关于可能导致这种情况的任何想法都会非常感激。

2 个答案:

答案 0 :(得分:3)

查看library's source后,它被写为扩展名,但示例和文档未提及扩展名的注册方式。试试这个:

module CmsMod
  class CmsApp < Sinatra::Base
    register Sinatra::SinatraAuthentication  # <= this is the missing magic line.

然后应该出现路线。另外,我还建议使用encrypted_cookie gem。

use Rack::Session::Cookie, :secret => 'something secret'

变为:

use Rack::Session::EncryptedCookie, :secret => 'something secret'

答案 1 :(得分:3)

似乎它也需要'haml'宝石,所以如果你不使用haml(比如我使用的是瘦身),你应该在你的项目中包含haml让它工作,真是太痛苦了!

还记得在视图中设置布局,因为默认情况下它会查找views / layout.haml