HTTP状态码302

时间:2015-10-01 08:50:19

标签: ruby-on-rails http post http-status-code-302

我在Ruby上使用我的Rails后端,我想将数据发布到此服务器。但如果我用PAW做一个Post-request,我会被重定向。我是Http Requests的新手。有人可以解释我的功能以及如何使用http post请求吗?

我想在我的服务器数据库(sqlite3)上发布信息。

这是一个截图,应该解释一切: i hope thats all information you need

这是如何工作的?请解释 :) 谢谢。 问候约翰

以及代码:

OwnersController:

#app/controllers/owners_controller.rb
class OwnersController < SessionsController
     respond_to :html
     before_action :owner_find, only: [:show, :edit, :update, :destroy]

     def index
        @owners = Owner.all
     end

     def show
     end  

    def update
       @owner = Owner.find(params[:id])

       if @owner.update(owner_params)
          redirect_to @owner
       else
          render 'edit'
       end
    end

    def new
       @owner = Owner.new
    end

    def destroy 
       @owner.destroy
       redirect_to owners_path
    end

    def edit
    end

    def create
        @owner = Owner.new owner_params
        if @owner.save!
           flash[:notice] = 'You signed up successfully'
           flash[:color]= 'valid'
           redirect_to owners_path
        else
           flash[:notice] = 'Form is invalid'
           flash[:color]= 'invalid'
          render 'new'
        end
    end

  private 

  def owner_find 
     @owner = Owner.find(params[:id])
  end  

  def owner_params
     params.require(:owner).permit(:name, :password, :password_confirmation, :token)
  end
end

SessionController:

class SessionsController < ApplicationController
  before_filter :authenticate_user, :except => [:login, :login_attempt]

  def login
    #goes to Login Form
  end

  def logout
    session[:owner_id] = nil
    redirect_to :action => 'login'
  end

  def login_attempt
    authorized_user = Owner.authenticate_by_name(params[:login_name],params[:login_password])
    if authorized_user
      session[:owner_id] = authorized_user.id
      flash[:notice] = "Wow Welcome again, you logged in as #{authorized_user.name}"
      redirect_to welcome_index_path
    else
      flash[:notice] = 'Invalid Username or Password'
      flash[:color]= 'invalid'
      render 'login'
    end
  end
end

控制台日志:

来自网络请求(http://192.168.2.144:3000/owners?name=hans&password=hans321&password_confirmation=hans321

  

开始GET&#34; /所有者?name = hans&amp; password = [FILTERED]&amp; password_confirmation = [FILTERED]&#34;对于2015.1-01 12:12:18 +0200的192.168.2.144   无法从192.168.2.144渲染控制台!允许的网络:127.0.0.1,:: 1,127.0.0.0/127.255.255.255   由OwnersController处理#index为HTML     参数:{&#34; name&#34; =&gt;&#34; hans&#34;,&#34; password&#34; =&gt;&#34; [FILTERED]&#34;,&#34; password_confirmation&#34; = GT;&#34; [FILTERED]&#34;}     所有者负载(0.1ms)SELECT&#34;所有者&#34;。* FROM&#34;所有者&#34;所有者&#34;。&#34; id&#34; =?限制1 [[&#34; id&#34;,2]]     所有者负载(0.1ms)SELECT&#34;所有者&#34;。* FROM&#34;所有者&#34;     在布局/应用程序中呈现owner / index.html.erb(1.8ms)   在60ms完成200 OK(浏览次数:58.9ms | ActiveRecord:0.2ms)

它告诉200确定,但数据库中没有任何事情发生。

来自Paw-Request的

(所以我可以使用post。顺便说一句。如何在浏览器请求中使用post?

  

开始发帖   &#34;?/所有者名称=汉斯&安培;密码= [FILTERED]&安培; password_confirmation = [FILTERED]&#34;   对于192.168.2.144在2015-10-01 12:12:45 +0200无法渲染控制台   从192.168.2.144!允许的网络:127.0.0.1,:: 1,   127.0.0.0/12/127.255.255.255 OwnersController处理#create as HTML参数:{&#34; name&#34; =&gt;&#34; hans&#34;,&#34;密码&#34; =&gt;&# 34; [FILTERED]&#34 ;,   &#34; password_confirmation&#34; =&gt;&#34; [已过滤]&#34;}无法验证CSRF令牌   真实性重定向到http://192.168.2.144:3000/过滤器链   暂停为:authenticate_user呈现或重定向已完成302   发现在1ms(ActiveRecord:0.0ms)

似乎CRSF身份验证失败了..

编辑:

起初: 来到Rich Peck!这对我帮助很大。谢谢!!我非常感谢你的努力。

我接近解决方案..我的问题是:我不能把正确的参数放在网址中。 token-auth被禁用以进行测试。所以它不重要。

参数应该是这样的:  参数:{&#34; utf8&#34; =&gt;&#34;✓&#34;,&#34; authenticity_token&#34; =&gt;&#34; q9JvFhoSUgfydFTvh18JHbIIdKNDjnOS9m / trVBu9EHPP04xGsO69zPh1BFZBI1Ev1YcnOTiPmaAiPWOSkm5Xg ==&#34;,& #34;所有者&#34; =&gt; {&#34;名称&#34; =&gt;&#34; Hubert&#34;,&#34;密码&#34; =&gt;&#34; [已过滤]& #34;,&#34; password_confirmation&#34; =&gt;&#34; [过滤]&#34;},&#34;提交&#34; =&gt;&#34;创建所有者&#34;} < / p>

而不是我的要求: 参数:{&#34; name&#34; =&gt;&#34; Hubert&#34;,&#34;密码&#34; =&gt;&#34; [过滤]&#34;,&#34; password_confirmation&#34; =&gt;&#34; [已过滤]&#34;,&#34;所有者&#34; =&gt; {}}

1 个答案:

答案 0 :(得分:8)

HTTP状态代码

首先,30x回复意味着"Resource Moved"

许多搜索引擎优化人员使用

301个响应来表示资源的永久重新定位。 302并不常见,但仍然意味着类似的事情。

每次发送&amp;接收HTTP请求,您将收到状态代码。典型的是200响应 - 状态成功

您所看到的是redirect_to命令正在运行 -

if @owner.save!
   flash[:notice] = ...
   redirect_to owners_path

我以前从未使用过PAW,但我认为它只是给你服务器的纯响应,在这种情况下是30x “资源移动”代码。

我希望一个典型的浏览器请求加载重定向的路由并在屏幕上显示其产量。

服务器

作为测试方法,您应该在浏览器中尝试相同的事务:

lvh.me:3000/orders

lvh.me is a domain routed to your own localhost有助于Rails中的子域名)

这将使您能够测试并查看响应的变化。您*应该*发现您的数据已保存到数据库中(尽管在您的情况下是SQLite3)。

<强>语法

最后,您需要确保在代码中使用正确的语法。

具体做法是:

#app/controllers/owners_controller.rb
class OwnersController < ApplicationController
   ...
   def create
      @owner = Owner.new owner_params
   end

   private

   def owner_params
      params.require(:owner).permit(:name, :password, :password_confirmation)
   end
end

您还需要查看bcrypt-ruby以保护您的密码。

<强>测试

我倾向于使用标准浏览器功能测试我的Rails应用程序。

这意味着您可以在控制台中运行Rails Server$ rails s),然后您可以通过浏览器访问该enter image description here

你正在尝试使用这个PAW的东西,这没关系,但是在应用程序的用户交互性方面没有给你很大的灵活性(例如,提交真实的表单等)......

enter image description here

enter image description here

在您的情况下,我会执行以下操作:

#app/views/orders/new.html.erb
<%= form_for @order do |f| %>
   <%= f.text_field :name %>
   <%= f.password_field :password %>
   <%= f.password_field :password_confirmation %>
   <%= f.submit %>
<% end %>

然后,您可以访问lvh.me:3000/orders/new并提交表单。这将告诉你它是如何回应的!

<强> HTTP

好的,这是处理HTTP请求......

here

每当您向Web应用程序发送一段事务数据时,都会通过HTTP请求执行此操作。 HTTP请求只是通过“Internet”发送数据的一种方式。

使用基于Rails的应用程序,这意味着每次您在应用程序中“执行”某些操作时,您确实向您的Web服务器发送HTTP请求。 Rails解释此请求并发送响应。这个回答是你的问题所在。

您要求接收302个回复 - 这是网络服务器说您已被重定向的方式。说实话,这是非常基本的东西;你的浏览器处理大部分内容。

可以找到一个很棒的教程enter image description here

WARNING: Can't verify CSRF token authenticity in case of API development

好的,你的错误如下:

  

无法验证CSRF令牌真实性

我稍后可以详细说明,但就目前而言,您可能希望查找此解决方案:{{3}}