在Sinatra的路线之间传递变量

时间:2014-05-13 01:35:05

标签: ruby ajax post sinatra

我在Sinatra网站上实施了注册的sms验证,我得到了这样的代码:

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

这会从发布请求中获取用户电话,而不是生成4位数代码,并通过获取请求将号码发送到短信服务。但是,页面没有重新加载,因为此时打开模态对话框,用户应键入代码。打开模态的按钮同时使用以下代码通过Ajax发送发布

$(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 路线中的第一条路线输入代码 var。但我需要。

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

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您应该考虑使用会话:here

首先在config中:

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