0

私はこれをグーグルで検索していて、有用なものは何も見つかりませんでした:

Railsでhttp基本認証を使用していると仮定すると、ユーザーが認証されているかどうかを確認する簡単な方法はありますか?つまり。ビューで次のようなことを実行できる方法:

- if http_basic_authenticated?
  # show admin menu
4

4 に答える 4

3

これを試して:

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ます。

テストを書いてください!

于 2012-06-11T02:36:07.443 に答える
2

で定義されたメソッドを介してアクセス可能なセッションパラメータを使用します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私はセキュリティの専門家ではないので、これを実稼働環境で使用することの適合性についてコメントすることはできません。

于 2012-06-11T01:53:33.423 に答える
0

ええと、私が知っているように、リクエストが認証されていないことをビューに伝える方法はありません。ビューに認証されていることを伝えることができますが、なぜですか?リクエストのプロセスを見てみましょう。

  1. クライアントリクエスト
  2. コントローラ
  3. 意見

2番目のステップでは、認証メソッドによって事前にフィルタリングされた特定のコントローラーのメソッド、つまり、3番目のステップであるビューに進むことができる場合は、要求を認証する必要があります。

于 2012-06-11T02:17:37.550 に答える
0

公式コードからスニペットを抽出して、ApplicationControllerによって継承された任意のコントローラーで次のようなものを使用できます。

class ApplicationController < BaseController
  ...
  protected # Only inherited controllers can call authorized?
  def authorized?
    request.authorization.present? && (request.authorization.split(' ', 2).first == 'Basic')
  end
...
end
于 2015-01-27T12:58:29.367 に答える