sinatra中的URL重定向不起作用?

时间:2014-03-03 03:05:55

标签: ruby-on-rails ruby sinatra

如果身份验证正确/无效,请查找我用来重定向的代码。

post '/user/validate' do
  login = params[:login]
  pwd = params[:pwd]
  if User.authenticate(login, pwd).nil?
    @error = "Username and the password do not match"
    puts "There is an error in authentication"
    halt erb :login
  else
    redirect to('https://www.google.com')
  end  
end

这不起作用。虽然Web控制台显示正在向我的定向URL谷歌触发GET请求。浏览器中的地址栏不会加载新页面,它会继续显示上一个请求的模板/视图。

嗨,请参阅下面的ajax调用的 Javascript 代码,使用此重定向不起作用,但使用简单旧表单提交页面的东西重定向工作。

$(document).ready(function()
{
 $("#send").click(function(event)
 {
    var data = { "login": $("#login").val(), "pwd": $("#pwd").val() };
    $.post( '/user/validate', data, 'json');
 });
});

普通 表单 标记

<form method="post" action="/user/validate">
<input type="submit" value="Signup" name="submit">
</form>

1 个答案:

答案 0 :(得分:0)

首先回答原来的问题:

  

sinatra中的URL重定向不起作用?   URL重定向适用于sinatra。

问题
您的问题是您使用jquery发布json数据。然后,您的JavaScript解决方案和表单解决方案之间的区别在于表单创建表单数据。

示例
要看一个卷曲示例的区别:

表格数据

  

curl -X POST 127.1:4567 / -d“foo = bar”

正常发布数据

  

curl -X POST -H“Content-Type:application / json”-d'{“payload”:“xyz”}'127.1:4567 /

你可以看到这些不一样。问题是现在默认情况下sinatra只解析表单数据。

Quickfix:request.body
如果你需要这些只是在位置,你可以手动解析params:

  

request.body.read

解决方案:rake-contrib
或者更好地使用rake-contrib。

  1. 使用gem install rake-contrib
  2. 安装
  3. 需要它

      

    要求'机架'

         

    要求'rack / contrib'

  4. 加载use Rack::PostBodyContentTypeParser

  5. 使用这些rake负责解析params中的帖子数据。