ruby-on-rails - 如何允许管理员用户伪装成未确认电子邮件的普通用户
问题描述
我在 Ruby on Rails 应用程序中使用设计。我的系统中有两种类型的用户,“管理员”和“用户”。在我的应用程序中,我允许管理员用户通过登录来“伪装”或冒充用户。
class Admin::Users::MasqueradeController < Admin::BaseController
load_and_authorize_resource :user, only: :create
def create
sign_in(:user, @user)
redirect_to user_path(@user)
end
end
这很好用,但是如果用户没有确认他们的电子邮件,devise 将立即在“sign_in”方法中抛出一个错误并返回默认的“您必须在继续之前确认您的电子邮件地址。”。当“current_admin_user”存在时,我需要找到一种跳过此检查的方法。
我当前的解决方案是将 allow_unconfirmed_access_for 设置为 nil ,但这会关闭所有用户的检查。相反,我希望它仅在管理员当前登录时跳过检查。因此,我最终不得不在 SessionsController 级别重新创建此检查,并确保它不会为管理员触发。这感觉很脏,这不是一个理想的解决方案。
config.allow_unconfirmed_access_for = nil
非常感谢您提供的任何帮助!
解决方案
我不知道它是否会起作用,但您可以尝试在@user
.
class Admin::Users::MasqueradeController < Admin::BaseController
load_and_authorize_resource :user, only: :create
def create
@user.confirmed_at = DateTime.now
sign_in(:user, @user)
redirect_to user_path(@user)
end
end
或者实际上更新它一秒钟:
class Admin::Users::MasqueradeController < Admin::BaseController
load_and_authorize_resource :user, only: :create
def create
@user.update(confirmed_at: DateTime.now)
sign_in(:user, @user)
@user.update(confirmed_at: nil)
redirect_to user_path(@user)
end
end
推荐阅读
- r - 在formattable中,背景颜色可以由不同的列确定吗
- wcf - 远程服务器返回意外响应:(413) Request Entity Too Large exception when using custom binding
- c# - 当 Newtonsoft.JSON 反序列化失败时,有没有办法返回自定义错误?
- javascript - 从 App Module 导航到子模块
- c# - 将多列从c#传递到sql server中的用户定义表类型
- php - 如何从另一台服务器连接 SQL 数据库?
- r - 如何在闪亮中重复创建新列
- postgresql - 带有过滤数据的备份数据库
- c# - 与 OPC UA 服务器通信 OPCDA 客户端
- php - Laravel / Lumen 只读模型?