【发布时间】:2019-06-23 11:55:24
【问题描述】:
我在 Ruby on Rails 应用程序中使用 Devise。我的系统中有两种类型的用户,“管理员”和“用户”。在我的应用程序中,我允许管理员用户通过登录来“伪装”或冒充用户。
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
非常感谢您提供的任何帮助!
【问题讨论】:
标签: ruby-on-rails devise devise-confirmable