【问题标题】:Passing variables between routes in Sinatra在 Sinatra 中的路由之间传递变量
【发布时间】:2014-05-26 07:37:47
【问题描述】:

我正在 Sinatra 网站上实现注册的短信验证,我得到了以下代码:

post '/reg' do
  phone = params[:phone].to_s
  code = Random.rand(1000..9999).to_s
  HTTParty.get('http://sms.ru/sms/send?api_id=' + api_id + phone + '&text=' + code)
end

这会从 post 请求中获取用户电话,然后生成 4 位代码,并通过 get 请求将号码上的代码发送到短信服务。但是,页面不会重新加载,因为此时会打开模式对话框,用户应该在其中键入 code。打开模式的按钮同时通过 Ajax 使用以下代码发送 post

$(document).ready(function(){
  $("#sendsms").click(function(){
    var phone = $("#phone").val();
    $.ajax({
      url: "/coop",
      data: {"phone": phone},
      type: "post"
    });
  });
});

在客户端检查用户的代码会很奇怪,这就是我得到这个动作路线的原因:

post '/coop/checkcode' do
  usrcode = params[:code]
  if code == usrcode
    redirect '/reg/success'
  else
    redirect '/reg/fail'
  end
end

但我不能只从 checkcode 路由中的第一个路由获取并键入 code var。但我需要。

是否存在任何可能的方法来传递该变量或以其他方式实现它?

提前谢谢你。

【问题讨论】:

    标签: ruby ajax post sinatra


    【解决方案1】:

    您应该考虑使用会话:here

    配置优先:

    enable :sessions
    

    现在你得到:

    post '/reg' do
      phone = params[:phone].to_s
      session[:code] = Random.rand(1000..9999).to_s
      HTTParty.get('http://sms.ru/sms/send?api_id=' + api_id + phone + '&text=' + session[:code])
    end
    

    post '/coop/checkcode' do
      usrcode = params[:code]
      if session[:code] == usrcode
        redirect '/reg/success'
      else
        redirect '/reg/fail'
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多