Sinatra::Warden 未定义的方法“已验证?” nil:NilClass

Sinatra::Warden undefined method `authenticated?' for nil:NilClass

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

NoMethodError at /admin undefined method `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!

可能是什么问题?

零错误来自 "sinatra_warden" gem,如果您查看它正在尝试调用 "request.env['warden']",这是零错误,因为:

您必须通过 "use"

为 Sinatra 提供 Warden Manager Rack 中间件
require 'warden'

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

  use Warden::Manager do |manager|

  ....

完成后,你必须想出一个监狱长 strategy/configure 经理。

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

似乎 sinatra-warden 保存了一些样板文件(为您提供 HAML 登录路由),但让您自行配置 Warden。