私はこれをグーグルで検索していて、有用なものは何も見つかりませんでした:
Railsでhttp基本認証を使用していると仮定すると、ユーザーが認証されているかどうかを確認する簡単な方法はありますか?つまり。ビューで次のようなことを実行できる方法:
- if http_basic_authenticated?
# show admin menu
私はこれをグーグルで検索していて、有用なものは何も見つかりませんでした:
Railsでhttp基本認証を使用していると仮定すると、ユーザーが認証されているかどうかを確認する簡単な方法はありますか?つまり。ビューで次のようなことを実行できる方法:
- if http_basic_authenticated?
# show admin menu
これを試して:
class ApplicationController < ..
before_filter :authenticate
def authenticate
authenticate_or_request_with_http_basic do |username, password|
@authenticated = username == "foo" && password == "bar"
end
end
def authenticated?
@authenticated
end
helper_method :authenticated?
end
これで、ビューで使用できauthenticated
ます。
テストを書いてください!
で定義されたメソッドを介してアクセス可能なセッションパラメータを使用しますApplicationController
。
class ApplicationController < BaseController
...
def authorize
session[:authorized] = true
end
def http_basic_authenticated?
session[:authorized]
end
def end_session
session[:authorized] = nil
end
end
PS私はセキュリティの専門家ではないので、これを実稼働環境で使用することの適合性についてコメントすることはできません。
ええと、私が知っているように、リクエストが認証されていないことをビューに伝える方法はありません。ビューに認証されていることを伝えることができますが、なぜですか?リクエストのプロセスを見てみましょう。
2番目のステップでは、認証メソッドによって事前にフィルタリングされた特定のコントローラーのメソッド、つまり、3番目のステップであるビューに進むことができる場合は、要求を認証する必要があります。
公式コードからスニペットを抽出して、ApplicationControllerによって継承された任意のコントローラーで次のようなものを使用できます。
class ApplicationController < BaseController
...
protected # Only inherited controllers can call authorized?
def authorized?
request.authorization.present? && (request.authorization.split(' ', 2).first == 'Basic')
end
...
end