deviseサインインで削除acts_as_as_paranoidユーザーを削除しました
-
29-10-2019 - |
質問
使用する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
所属していません StackOverflow