【问题标题】:sinatra-authentication routes not found未找到 sinatra 身份验证路由
【发布时间】:2012-12-04 02:28:42
【问题描述】:

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

【问题讨论】:

  • 我也有同样的问题,不过还没找到解决办法。
  • @Masonoise - 你找到原因了吗?
  • 我最终把它放在一边,而且还没有必要回到它,遗憾的是......

标签: authentication routes sinatra


【解决方案1】:

查看了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'

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 使用 ruby​​gems 的 0.4.1 是正确的,但 0.4.2 在 github 上,不需要 haml。见this issue
    猜你喜欢
    • 2013-03-27
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 2021-09-21
    • 2023-04-08
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多