2017-08-09 6 views
0

Je suis en train d'utiliser l'authentification pour mon application web Sinatra avec le module Sinatra_warden, mais quand je signale un site autorisé, il dit:Sinatra :: Warden méthode non définie `authentifié? ' pour nul: NilClass

NoMethodError à/admin méthode non définie authentifié » pour nul: NilClass

Voici mon fichier 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 

et mon fichier model.rb ici, juste au cas où:

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! 

Que peut-on le problème?

Répondre

0

L'erreur vient nul de la gemme « sinatra_warden », si vous regardez dans il essaie d'appeler « request.env [ « garde »] », ce qui est nul parce que:

Vous devez donner Sinatra la Warden directeur middleware rack par « utiliser »

require 'warden' 

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

    use Warden::Manager do |manager| 

    .... 

une fois que vous faites cela, vous devez trouver une stratégie Warden/configurer le gestionnaire.

Voici un exemple: https://github.com/sklise/sinatra-warden-example#apprb-cont

On dirait que sinatra-garde sauve un peu passe-partout (vous donne des itinéraires de connexion HAML), mais laisse à vous de configurer Warden.