Sinatraアプリケーション内の保護された一連のURL(管理セクション)の後ろにリダイレクトするときに、ちょっと遭遇しました。たぶん愚かな間違いですが、私はオンラインで役立つものを見つけていません。SinatraのPost/Redirect Auth問題
これは、ユーザーが新しいイベントを作成できるヘルパーが示すように、パスワードで保護された領域用です。ユーザが初めて管理者にアクセスしようとすると、パスワードの入力を求められ、その後のページが残されます。私が持っている問題は、成功した新しいイベントが行われた後にアプリケーションがリダイレクトしようとすると、ユーザーは自分自身を再認証しなければならないということです。
これは、削除と編集のプロセスにも当てはまります。リダイレクトが試行されると、ユーザーは常にプロンプトを表示します。私はどんな質問/ヘルプは
helpers do
def protected!
unless authorized?
response['WWW-Authenticate'] = %(Basic realm="Restricted Area")
throw(:halt, [401, "Not authorized\n"])
end
end
def authorized?
@auth ||= Rack::Auth::Basic::Request.new(request.env)
@auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ['admin', 'admin']
end
end
...
get "/admin/events/:id" do
protected!
conf = Conference.where(:_id => params[:id]).first
not_found unless conf
haml :admin_event_edit, :layout => :admin_layout, :locals => { :event => conf }
end
post "/admin/events/new/" do
protected!
conf = Conference.new(params[:event])
if conf.save!
redirect "/admin/events/"
else
"Something went horribly wrong creating the new event, heres the form contents #{params.inspect}"
end
end
get "/admin/events/" do
protected!
haml :admin_events, :layout => :admin_layout, :locals => { :our_events => Conference.where(:made => true).order_by(:start_date.asc).limit(15), :other_events => Conference.where(:made => false).order_by(:start_date.asc).limit(15)}
end
これを回避するには、ボーナスはクッキーであることクッキーベースの認証http://ididitmyway.heroku.com/past/2011/2/22/really_simple_authentication_in_sinatra/を使用することができますHTTP基本認証が終了したときにのみ(またはSafariのKeychain Accessの場合のみ)タイムアウトするように設定できます。 – kreek
ああ、恥ずかしいこと、それを見てくれてありがとう、ええ、それはクロムとFFで扱われる作品です。唯一の内部なので、少し時間をかけて考えてみてください。 – redroot