3

私はRails 3.1.3アプリを持っています。これはdeviseユーザー認証に使用し、acts_as_paranoid. パスワードの再作成、ユーザーのサインアップ、およびユーザーのサインイン時にアカウントが削除されないようにしたいので、削除された電子メールを提供した場合は、そのアカウントを取得し、再び有効にしてから、アクション (パスワードの再作成またはサインイン) を続行します。 )。

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

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も、何も変わりません。また、もう一度サインインすると、前回の試行で元に戻されたため、ユーザーは通常どおりサインインします。

なぜこうなった?create1 回の通話で削除を取り消してサインインするにはどうすればよいですか?

4

1 に答える 1

5

次のコード スニペットで解決しました。

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
于 2012-03-23T19:50:01.280 に答える