使用会话确定其注册或登录

时间:2018-10-25 15:59:26

标签: ruby-on-rails ruby ruby-on-rails-4

这是我的情况:

注意:刚注册时,填写表格,将带您进入欢迎页面,然后单击一个按钮继续,该操作会将您带到设置页面以设置个人资料,然后再进行设置有权访问该应用程序。

注意:如果主动登录,则应用会话为5小时

但是,当用户注册时,他们被重定向到WelcomePage,此刻,举个例子,紧急情况发生了,他或她没有进入下一步,即设置,进入设置阶段。 /她回来,他/她被重定向到设置页面

这是我在下面所做的操作,当用户离开紧急状态并返回时,这对我不起作用,这应该是将他/她带到设置路径/页面。 < / p>

我已完成但无法正常工作

我在应用程序控制器中创建了一个新方法,并将其传递给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

我该如何处理?

1 个答案:

答案 0 :(得分:0)

您能否详细说明“例如发生紧急情况”?如果有什么事情可以解决,则可能会影响注册过程。我会将整个内容包装在begin ... rescue块中,以确保始终从服务器获得正确的响应。

您还希望确保其“用户”的实际状态在数据库中得以保留。如果前端出现问题,则不应影响服务器知道的内容。永远不要信任客户。

登录方式如下:

  1. 用户进入登录/注册(两种形式)
  2. 输入凭据并将其发送到任一端点。
  3. 如果数据库说这些凭据是正确的,则将哈希存储在会话存储中,发送带有到期时间,其用户ID和某种哈希的cookie。优选地,JWT。并发出redirect_to网址
  4. 任何后续调用都应验证cookie是否存在,从cookie重新计算哈希,并检查会话存储区中的哈希是否相同。如果是,则提供内容,否则,将其重定向到登录名。

您是否听说过设计,顺便说一句?使这变得容易得多。

干杯!