gpt4 book ai didi

ruby-on-rails - 如何使用Devise停止软删除用户的登录

转载 作者:行者123 更新时间:2023-12-04 06:33:09 27 4
gpt4 key购买 nike

我目前在Rails项目中使用Devise进行用户注册/身份验证。
当用户想要取消其帐户时,将通过以下方式软删除该用户对象。

How to "soft delete" user with Devise

这样,我的渗透就不会有太大的不同。
用户模型具有属性“deleted_flag”。
并且,soft_delete方法执行“update_attribtue(:deleted_flag,true)”

但是,我必须实现登录操作。
以下是我的观点。

class SessionsController < Devise::SessionsController
def create
resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")

if resource.deleted_flag
p "deleted account : " + resource.deleted_flag.to_s
sign_out(resource)
render :controller => :users, :action => :index
else
if is_navigational_format?
if resource.sign_in_count == 1
set_flash_message(:notice, :signed_in_first_time)
else
set_flash_message(:notice, :signed_in)
end
end
sign_in(resource_name, resource)
respond_with resource, :location => redirect_location(resource_name, resource)
end
end
end

我认为这段代码有一些奇怪的地方。

如果删除的用户尝试唱歌,
系统允许记录并立即注销。
而且,系统无法显示flash [:alert]消息...

我想知道两点。
  • 如何实现禁止删除的用户登录?
  • 当删除的用户尝试登录时,如何实现显示flash [:alert]?
  • 最佳答案

    要停止已被“软件删除”的用户,最好的方法是覆盖用户模型上的find_for_authentication类方法。如:

    Class User < ActiveRecord::Base
    def self.find_for_authentication(conditions)
    super(conditions.merge(:deleted_flag => false))
    end

    这将通过设计生成无效的电子邮件或密码刷新消息(因为它找不到用户进行身份验证)

    至于第二个问题,您将需要 Controller 中的for方法来添加特定的即显消息。但是,我认为您应该将被“软”删除的用户视为完全不存在于数据库中的用户。因此,如果他们尝试登录,则应该只获得有效的电子邮件或密码消息。

    关于ruby-on-rails - 如何使用Devise停止软删除用户的登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454032/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com