Использование сессии, чтобы определить, является ли ее регистрация или вход - PullRequest
0 голосов
/ 25 октября 2018

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

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

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

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

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

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

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

session_controller create action

  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

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

1 Ответ

0 голосов
/ 25 октября 2018

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

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

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

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

Кстати, вы слышали об устройстве?Делает это намного проще.

Ура!

...