0

すべてのセッション情報をデータベースに保存します。ユーザーは何かをするためにシステムにログインできます。ユーザーログインが必要な制限エリアがいくつかあります。ユーザーがログイン前にこれらの領域に到達しようとすると、システムはユーザーをログイン ページにリダイレクトします。

ログアウトせずにブラウザを閉じる場合があります。これが発生すると、次にログインしようとしたときに、ユーザーが正しいユーザー名とパスワードを入力したとしても、システムは新しく生成されたセッションを認識できません。その後、システムはユーザーのログインを再度強制します。

誰でもこれを修正する方法を知っていますか? reset_sessionログインページをロードする前に、セッションをリセットしようとしました。問題を修正できません。

セッションコントローラー

  def new
  end

  def create
    session[:current_account] = Account.authenticate(params[:email], params[:password])
    if session[:current_account]
      redirect_to :controller => "xxxxx", :action => "index"
    else
      flash[:notice] = "Please try again."
      render :action => 'new'
    end
  end

アカウント モデル

  def self.authenticate(email, pass)
    account = find_by_email(email)
    account && account.authenticated?(pass) ? account : nil
  end

  def authenticated?(pass)
    encrypted_password == Account.encrypt(pass,salt)
  end

Xxxxx コントローラー

  before_filter :permission_handling

  def index
  end

アプリケーションコントローラー

  def permission_handling
    unless logged_in?
      forced_login
    end
  end

  def logged_in?
    session[:current_account].is_a?(Account)
  end

  def forced_login
    flash[:notice] = "You haven't login yet!"
    redirect_to ( :controller => "sessions", :action => "new" )
  end

皆さんありがとう。:)

4

1 に答える 1

2

セッションに Account オブジェクトを保存しているようです。これはお勧めできません。セッションのアカウント ID などの単純な値だけを保存する必要があります。

Model.authenticatereturnに変更し、アカウントをセッションに保持するのではなく、データベースからロードしてaccount.id確認します。logged_in

これで問題が完全に解決されるかどうかはわかりませんが、重要かもしれません。

于 2010-06-23T10:15:50.500 に答える