Использование сеанса, чтобы определить, является ли его подписка или вход в систему

Вот мой сценарий:

Примечание: Когда вы впервые регистрируетесь, вы заполняете форму, она переводит вас на страницу приветствия и вы нажимаете кнопку, чтобы продолжить, которая переводит вас на страницу настроек для настройки вашего профиля, прежде чем вы получите доступ к приложению.

Примечание: сеанс приложения составляет 5 часов при активном входе в систему

Однако, когда пользователь регистрируется, и они перенаправляются на страницу приветствия, и на данный момент, допустим, например, произошла чрезвычайная ситуация, и он или она не завершили этапы регистрации, перейдя к следующему этапу, который является настройками, когда он / она получает назад, он / она перенаправляется на страницу настроек

Вот что я сделал ниже, и это не сработает для меня, когда пользователь, который ушел в аварийной ситуации, возвращается, что, как предполагается, приведет его / ее к пути / странице настроек.

Что я сделал, но не работает

Я создал новый метод в контроллере приложения и передал его в действие create для перенаправления на этот путь, однако я не думаю, что это лучшее решение.

sessions_controller создать действие

  def create
    if verify_recaptcha
      @member = Member.from_auth(auth_hash)
    end

    if @member
      if @member.disabled?
        increase_failed_logins
        redirect_to signin_path, alert: t('.disabled')
      else
        clear_failed_logins
        reset_session rescue nil
        session[:member_id] = @member.id
        save_session_key @member.id, cookies['_peatio_session']
        save_signup_history @member.id
        MemberMailer.notify_signin(@member.id).deliver if @member.activated?
        if @member.disabled?
          redirect_back_or_settings_page # here is the method
        else
          redirect_back_to_success_page # here is the method
        end
      end
    elsif (!verify_recaptcha)
      redirect_to signin_path, alert: t('.put_capture')
    else
      increase_failed_logins
      redirect_to signin_path, alert: t('.error')
    end
  end

соответствующий метод в контроллере приложения

def redirect_back_or_settings_page
  if cookies[:redirect_to].present?
    redirect_to cookies[:redirect_to]
    cookies[:redirect_to] = nil
  else
    redirect_to settings_path
  end
end


def redirect_back_to_success_page
  if cookies[:redirect_to].present?
    redirect_to cookies[:redirect_to]
    cookies[:redirect_to] = nil
  else
    redirect_to signup_success_index_path
  end
end

Как мне с этим справиться?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
32
1

Ответы 1

Не могли бы вы уточнить «на примере чрезвычайной ситуации»? Если что-то может сломаться в этом, это могло бы повлиять на процесс регистрации. Я бы обернул все это в блок begin ... rescue, чтобы гарантировать, что они всегда получают правильный ответ от сервера.

Вы также хотите убедиться, что фактическое состояние их «пользователя» сохраняется в базе данных. Если что-то пойдет не так во внешнем интерфейсе, это не должно повлиять на то, что знает сервер. Никогда не доверяйте клиенту.

Вот как должен проходить вход в систему:

  1. Пользователь заходит для входа / регистрации (в любой форме)
  2. Учетные данные вводятся и отправляются в любую конечную точку.
  3. Если в базе данных указано, что эти учетные данные верны, сохраните хэш в хранилище сеансов, отправьте cookie с указанием времени истечения срока действия, их идентификатора пользователя и какого-либо хеша. Желательно JWT. И выдать url redirect_to
  4. Любой последующий вызов должен проверять, существует ли cookie, пересчитывать хэш из cookie и проверять, совпадает ли хэш в вашем хранилище сеансов. Если это так, обслуживайте контент, в противном случае перенаправьте их для входа в систему.

Вы слышали о разработке, кстати? Делает это намного проще.

Ваше здоровье!

Другие вопросы по теме