質問

使用するRails 3.1.3アプリがあります devise ユーザーの認証とソフトデレットを使用して acts_as_paranoid. 。パスワードのレクリエーション、ユーザーのサインアップ、ユーザーサインイン時にアカウントを削除してもらいたいので、削除されたメールを提供する場合は、そのアカウントをつかみ、再びライブにしてから、アクション(パスワードレクリエーション、またはサインインを続行します。 )。

しかし、 Users::SessionsController#create アクション、ユーザーの削除後、不正エラーが発生します(ただし、ユーザーが表示されるはずです)。コードは次のとおりです。

def create
  # Take into account acts_as_paranoid deleted users
  resource = resource_class.only_deleted.find_by_email(params[resource_name][:email])
  resource.undelete! if resource

  resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
  set_flash_message(:notice, :signed_in) if is_navigational_format?
  sign_in(resource_name, resource)
  respond_with resource, :location => after_sign_in_path_for(resource)
end

追加する場合 resource.reload 削除の後、それは何も変えません。そして、私が再びサインインすると、ユーザーは以前の試みで削除されたため、通常サインインされます。

なぜこうなった?どうすればそれを未定にしてサインインすることができますか create 電話?

役に立ちましたか?

解決

次のコードスニペットでそれを解決しました:

def create
  # Take into account acts_as_paranoid deleted users
  if (resource = resource_class.only_deleted.find_by_email(params[resource_name][:email]))
    resource.undelete!
    # Copied from Warden::Strategies database_authenticatable:
    sign_in resource if resource.valid_password?(params[resource_name][:password])
  end
  super
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top