0

ログイン機能に問題があります。

  1. ユーザーがログアウト リンクをクリックすると、すべてが正常に機能し、セッションが破棄され、ユーザーは別のユーザーとしてログインできるようになります。
  2. 現在サインインしているユーザーがブラウザーを閉じてログイン ページに戻った場合、またはユーザーが単に [戻る] ボタンを押してログイン ページに戻り、別のユーザーとしてサインインしようとした場合、ユーザーは以前にログインしたユーザーにリダイレクトされます。その特定のブラウザ上のアプリケーションに。
    これは望ましくない機能です。ユーザーがログイン ページに戻るかどうか、またはウィンドウを閉じてログイン ページに戻るかどうかに関係なく、ユーザーが任意のアカウントにサインインできるようにしたいと考えています。

    私は6つの異なる解決策を試しましたが、どれもうまくいきませんでした. コードに変更を加えても、ログイン機能は常に session[:warden.user.person.key] ハッシュからユーザー ID を取得し、ログイン テキスト フィールドに何が入力されても、それを使用してログインするようです。私はこのプロセスを制御しようとしましたが、すべての試みで失敗しました。

    私はアイデアを使い果たしました.これは私たちのシステムのセキュリティホールと見なされているため、いくつかの助けが必要です.
    コードについて他に何が欲しいか教えてください。セッション コントローラーのコードと私のルートを紹介します。

 
class SessionsController  Devise::SessionsController

  def new
    session["devise.omniauth_data"]=nil
    session[:last_registration_role]=nil
    super
  end
  def create
    if params['person']['remember_me'] == '1'
      cookies.signed['rem'] = {
        :value => params['person']['email'],
        :expires => 1.year.from_now,
        :httponly => true
      }
    end
    super
  end
  def destroy

    session["devise.omniauth_data"]=nil
    session[:last_registration_role]=nil
    super
    reset_session
  end    
end

ルート



                     new_person_session GET      /people/sign_in(.:format)                                                                           {:action=>"new", :controller=>"sessions"}
                                    person_session POST     /people/sign_in(.:format)                                                                           {:action=>"create", :controller=>"sessions"}
                            destroy_person_session GET      /people/sign_out(.:format)                                                                          {:action=>"destroy", :controller=>"sessions"}
                                   person_password POST     /people/password(.:format)                                                                          {:action=>"create", :controller=>"devise/passwords"}
                               new_person_password GET      /people/password/new(.:format)                                                                      {:action=>"new", :controller=>"devise/passwords"}
                              edit_person_password GET      /people/password/edit(.:format)                                                                     {:action=>"edit", :controller=>"devise/passwords"}
                                                   PUT      /people/password(.:format)                                                                          {:action=>"update", :controller=>"devise/passwords"}

4

1 に答える 1

0

application_controller で、サインイン後にユーザーを送信する正確な場所を設定してみてください。

def after_sign_in_path_for(resource)
  root_path
end
于 2012-03-02T19:32:05.257 に答える