Неопределенный метод Sinatra::Warden "аутентифицирован?" для нуля: NilClass

Я пытаюсь использовать аутентификацию для своего веб-приложения Sinatra с модулем Sinatra_warden, но когда я указываю на авторизованный сайт, он говорит:

NoMethodError в /admin неопределенный метод "аутентифицирован?" для 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!

В чем может быть проблема?


person Nick Handy    schedule 09.08.2017    source источник


Ответы (1)


Ошибка nil исходит от драгоценного камня «sinatra_warden», если вы посмотрите, он пытается вызвать «request.env['warden']», что равно нулю, потому что:

Вы должны предоставить Sinatra промежуточное ПО Warden Manager Rack через «использование».

require 'warden'

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

  use Warden::Manager do |manager|

  ....

После того, как вы это сделаете, вам нужно придумать стратегию Warden/настроить менеджера.

Вот пример: https://github.com/sklise/sinatra-warden-example#apprb-cont

Похоже, что sinatra-warden сохраняет некоторые шаблоны (дает вам маршруты входа в систему HAML), но оставляет вам возможность настроить Warden.

person jeremy04    schedule 09.08.2017