4

我正在尝试将 sinatra-authentication 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 块内的内容,并且据我所知路由不存在。任何关于可能导致这种情况的想法都将不胜感激。

4

2 回答 2

3

似乎它也需要'haml' gem,所以如果你不使用 haml(就像我使用 slim),你应该在你的项目中包含 haml 让它工作,真是痛苦!

还要记住在你的视图中设置布局,因为默认情况下它会寻找views/layout.haml

于 2012-12-03T18:28:42.650 回答
3

查看库的源代码后,它被编写为扩展,但示例和文档没有提及扩展是如何注册的。尝试这个:

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'
于 2012-09-19T02:03:59.283 回答