Как разрешить администраторам маскироваться под обычных пользователей, которые не подтвердили свою электронную почту - PullRequest
0 голосов
/ 23 июня 2019

Я использую Devise в приложении 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

Очень ценю любую помощь, которую вы можете оказать!

Ответы [ 2 ]

0 голосов
/ 23 июня 2019

user.rb

def confirmed?
  admin_user?
end

функция admin_user?должен вернуть true для вашего администратора.

0 голосов
/ 23 июня 2019

Я не знаю, сработает ли это, но вы можете попытаться установить подтвержденный_ат @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...