【问题标题】:Sinatra::Warden undefined method `authenticated?' for nil:NilClassSinatra::Warden 未定义的方法“经过身份验证?”对于零:NilClass
【发布时间】:2017-08-09 17:57:07
【问题描述】:

我正在尝试通过 Sinatra_warden 模块对我的 Sinatra Web 应用程序使用身份验证,但是当我指向授权站点时,它会显示:

NoMethodError 在 /admin 未定义的方法 `authenticated?'对于 nil:NilClass

这是我的 app.rb 文件:

require 'sinatra'
require 'sinatra_warden'

class App < Sinatra::Base
  register Sinatra::Warden
enable :sessions

  get '/' do
    erb :index
  end

  get '/admin' do
    authorize!('/login')
    erb :admin
  end

  get '/dashboard' do
    authorize!
    erb :dashboard
  end
end

这是我的 model.rb 文件,以防万一:

require 'rubygems'
require 'data_mapper'
require 'dm-sqlite-adapter'
require 'bcrypt'

DataMapper.setup(:default, "sqlite:test.db")

class User
  include DataMapper::Resource

  property :id, Serial, :key => true
  property :username, String, :length => 3..50
  property :password, BCryptHash

end

DataMapper.finalize
DataMapper.auto_upgrade!

可能是什么问题?

【问题讨论】:

    标签: ruby web-applications sinatra rack warden


    【解决方案1】:

    nil 错误来自“sinatra_warden”gem,如果您查看它试图调用“request.env['warden']”,这是 nil,因为:

    您必须通过“使用”为 Sinatra 提供 Warden Manager Rack 中间件

    require 'warden'
    
    class App < Sinatra::Base
      register Sinatra::Warden
      enable :sessions
    
      use Warden::Manager do |manager|
    
      ....
    

    在你这样做之后,你必须想出一个守望者策略/配置经理。

    这是一个例子: https://github.com/sklise/sinatra-warden-example#apprb-cont

    似乎 sinatra-warden 节省了一些样板文件(为您提供 HAML 登录路线),但由您来配置 Warden。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多