在Sinatra程序里实现HTTP Digest Authorization

网上没找到相关的文章,在这里发一下。

密码在数据库里明文储存的情况。

require 'rubygems'
require 'sinatra'

class MyAuth < Rack::Auth::Digest::MD5
  def initialize(*args)
    super
    self.opaque = 'this-should-be-secrest'
  end
end

use MyAuth, 'test1' do |username|
  {'admin' => 'admin'}[username]
end

get '/' do
  'Welcome!'
end


如果需要将保存在数据库里的密码加密,需要将其按MD5('username:realm:password')的形式加密,既ha1。

require 'rubygems'
require 'sinatra'
require 'digest/md5'

class MyAuth < Rack::Auth::Digest::MD5
  def initialize(*args)
    super
    self.passwords_hashed = true
    self.opaque = 'this-should-be-secrest'
  end
end

use MyAuth, 'test1' do |username|
  {'admin' => ::Digest::MD5.hexdigest(['admin', 'test1', 'admin'] * ':')}[username]
end

get '/' do
  'Welcome!'
end


中间件Rack::Auth::Digest::MD5必须设置opaque的值才能使用,除了继承我还没找到其他办法。

你可能感兴趣的:(中间件,Ruby,rubygems,rack,Sinatra)