Обрезка строки MySQL после заданной строки

Я обнаружил, что решение в оригинальной публикации не работает для меня. Я хотел, чтобы первый пользователь вышел из системы и на странице входа. Кроме того, метод sign_out_and_redirect(current_user) не работает так, как я ожидал. Используя переопределение SessionController в этом решении, я модифицировал его для использования веб-сокетов следующим образом:

def create
  super
  force_logout
end

private
def force_logout
    logout_subscribe_address = "signout_subscribe_response_#{current_user[:id]}"
    logout_subscribe_resp = {:message => "#{logout_subscribe_address }: #{current_user[:email]} signed out."}
    WebsocketRails[:signout_subscribe].trigger(signout_subscribe_address, signout_subscribe_resp)
  end
end

Убедитесь, что все веб-страницы подписываются на канал выписки и связывают его с тем же действием logout_subscribe_address. В моей заявке каждая страница также имеет кнопку «выйти», которая выдает клиенту через сеансовое действие «Уничтожить». Когда ответ веб-камеры запускается на веб-странице, он просто нажимает на эту кнопку - вызывается логика выписки, а первый пользователь представлен на странице входа.

Это решение также не требует skip_before_filter :check_concurrent_session и модель login_token, поскольку она запускает принудительный выход без предубеждений.

Для записи, devise_security_extension, как представляется, обеспечивает функциональность, чтобы сделать это. Он также устанавливает соответствующее предупреждение, предупреждающее первого пользователя о том, что произошло (я еще не понял, как это сделать).

0
задан Christopher Penn 18 March 2019 в 14:25
поделиться

1 ответ

Опция TRAILING с TRIM относится к последним символам, а не к целым словам, начинающимся с определенного слова. Попробуйте использовать INSTR здесь:

UPDATE scanner
SET pagetitle = LEFT(pagetitle, INSTR(pagetitle, 'via') - 2);
WHERE pagetitle REGEXP '[[:<:]]via[[:>:]]';

Демо

Если вы используете MySQL 8+ или более позднюю версию, то мы можем попробовать использовать REGEXP_REPLACE:

UPDATE scanner
SET pagetitle = REGEXP_REPLACE(pagetitle, '\\s+via.*', '');
0
ответ дан Tim Biegeleisen 18 March 2019 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: