2017-08-09 66 views
0

我試圖使用身份驗證與Sinatra_warden模塊我西納特拉的Web應用程序,但是當我指向一個授權的網站,它說:Sinatra ::監獄長未定義的方法`認證?'對於零:NilClass

NoMethodError在/管理員未定義的方法'認證」對於零: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! 

可以採取什麼問題嗎?

回答

0

的零誤差從「sinatra_warden」創業板來了,如果你看看它試圖打電話給「request.env [‘看守’]」,這是因爲爲零:

你必須給西納特拉的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

好像西納特拉,監獄長可以節省一些樣板(給你HAML登錄路由),但保留這些給你配置監獄長。

相關問題