HTTP 状态代码 302
HTTP status code 302
我正在 Ruby 开发我的 Rails 后端,我想 post 数据到此服务器。但是,如果我使用 PAW 执行 Post-请求,我将被重定向。我是 Http 请求的新手。有人可以向我解释功能以及如何使用 http post 请求吗?
我想post关于我服务器的数据集(sqlite3)的信息。
这是一张截图,应该可以解释一切:
这是如何工作的?请解释 :)
谢谢。
问候约翰
这是代码:
所有者控制器:
#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
会话控制器:
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)
Started GET "/owners?name=hans&password=[FILTERED]&password_confirmation=[FILTERED]" for 192.168.2.144 at 2015-10-01 12:12:18 +0200
Cannot render console from 192.168.2.144! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by OwnersController#index as HTML
Parameters: {"name"=>"hans", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}
Owner Load (0.1ms) SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 2]]
Owner Load (0.1ms) SELECT "owners".* FROM "owners"
Rendered owners/index.html.erb within layouts/application (1.8ms)
Completed 200 OK in 60ms (Views: 58.9ms | ActiveRecord: 0.2ms)
显示 200 正常,但数据库中没有任何反应。
来自 Paw-Request(所以我可以使用 post。顺便说一下,我如何在浏览器请求中使用 post?
Started POST
"/owners?name=hans&password=[FILTERED]&password_confirmation=[FILTERED]"
for 192.168.2.144 at 2015-10-01 12:12:45 +0200 Cannot render console
from 192.168.2.144! Allowed networks: 127.0.0.1, ::1,
127.0.0.0/127.255.255.255 Processing by OwnersController#create as HTML Parameters: {"name"=>"hans", "password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]"} Can't verify CSRF token
authenticity Redirected to http://192.168.2.144:3000/ Filter chain
halted as :authenticate_user rendered or redirected Completed 302
Found in 1ms (ActiveRecord: 0.0ms)
好像是CRSF认证失败了..
编辑:
起初:
给里奇派克!这对我帮助很大。谢谢!!我真的很感谢你的努力。
我接近解决方案了。我的问题是:我无法将正确的参数放入 url。 token-auth 被禁用以进行测试。所以没关系。
参数应该是这样的:
参数:{"utf8"=>"✓", "authenticity_token"=>"q9JvFhoSUgfydFTvh18JHbIIdKNDjnOS9m/trVBu9EHPP04xGsO69zPh1BFZBI1Ev1YcnOTiPmaAiPWOSkm5Xg==", "owner"=>{"name"=>"Hubert", "password"=>[已过滤], "password_confirmation"=>[已过滤]"}, "commit"=>"Create Owner"}
与我的要求不同:
参数:{"name"=>"Hubert", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "owner"=>{ }}
HTTP 状态代码
首先,30x
响应意味着 "Resource Moved"。
301
响应被许多 SEO 人员用来表示资源的永久迁移。 302
不太常见,但意思还是差不多。
每次发送和接收 HTTP 请求时,您都会收到一个状态代码。典型的是 200
响应 -- status success!
您看到的是正在运行的 redirect_to
命令 -
if @owner.save!
flash[:notice] = ...
redirect_to owners_path
我以前从未使用过 PAW,但我认为它只是给你服务器的纯响应,在这种情况下是 30x
"Resource Moved"代码。
我希望典型的浏览器请求加载重定向的路由并在屏幕上显示它的收益。
服务器
作为对此进行测试的一种方法,您应该在浏览器中尝试相同的交易:
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
),然后您就可以通过浏览器访问它。
你正在尝试使用这个 PAW 东西,这没问题,但在应用程序的用户交互性方面没有给你太多灵活性(例如,提交真实表格等)...
对于您的情况,我会执行以下操作:
#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 请求的处理...
无论何时向 Web 应用程序发送一段交易数据,都是通过 HTTP 请求进行的。 HTTP 请求只是通过 "Internet".
发送数据的一种方式
对于基于 Rails 的应用程序,这意味着每次您 "do" 应用程序中的某些内容时,您 确实 向您的应用程序发送 HTTP 请求网络服务器。 Rails 解释此请求并发送 响应 。这个回复就是你的问题。
您询问的是接收 302
响应 - 这是 Web 服务器表示您已被重定向的方式。老实说,这是非常基本的东西;您的浏览器可以处理其中的大部分内容。
可以找到很棒的教程here:
好的,那么你的错误如下:
Can't verify CSRF token authenticity
稍后我可以对此进行详细说明,但现在,您可能需要查找此解决方案:WARNING: Can't verify CSRF token authenticity in case of API development
我正在 Ruby 开发我的 Rails 后端,我想 post 数据到此服务器。但是,如果我使用 PAW 执行 Post-请求,我将被重定向。我是 Http 请求的新手。有人可以向我解释功能以及如何使用 http post 请求吗?
我想post关于我服务器的数据集(sqlite3)的信息。
这是一张截图,应该可以解释一切:
这是如何工作的?请解释 :) 谢谢。 问候约翰
这是代码:
所有者控制器:
#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
会话控制器:
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)
Started GET "/owners?name=hans&password=[FILTERED]&password_confirmation=[FILTERED]" for 192.168.2.144 at 2015-10-01 12:12:18 +0200 Cannot render console from 192.168.2.144! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by OwnersController#index as HTML Parameters: {"name"=>"hans", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"} Owner Load (0.1ms) SELECT "owners".* FROM "owners" WHERE "owners"."id" = ? LIMIT 1 [["id", 2]] Owner Load (0.1ms) SELECT "owners".* FROM "owners" Rendered owners/index.html.erb within layouts/application (1.8ms) Completed 200 OK in 60ms (Views: 58.9ms | ActiveRecord: 0.2ms)
显示 200 正常,但数据库中没有任何反应。
来自 Paw-Request(所以我可以使用 post。顺便说一下,我如何在浏览器请求中使用 post?
Started POST "/owners?name=hans&password=[FILTERED]&password_confirmation=[FILTERED]" for 192.168.2.144 at 2015-10-01 12:12:45 +0200 Cannot render console from 192.168.2.144! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by OwnersController#create as HTML Parameters: {"name"=>"hans", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"} Can't verify CSRF token authenticity Redirected to http://192.168.2.144:3000/ Filter chain halted as :authenticate_user rendered or redirected Completed 302 Found in 1ms (ActiveRecord: 0.0ms)
好像是CRSF认证失败了..
编辑:
起初: 给里奇派克!这对我帮助很大。谢谢!!我真的很感谢你的努力。
我接近解决方案了。我的问题是:我无法将正确的参数放入 url。 token-auth 被禁用以进行测试。所以没关系。
参数应该是这样的: 参数:{"utf8"=>"✓", "authenticity_token"=>"q9JvFhoSUgfydFTvh18JHbIIdKNDjnOS9m/trVBu9EHPP04xGsO69zPh1BFZBI1Ev1YcnOTiPmaAiPWOSkm5Xg==", "owner"=>{"name"=>"Hubert", "password"=>[已过滤], "password_confirmation"=>[已过滤]"}, "commit"=>"Create Owner"}
与我的要求不同: 参数:{"name"=>"Hubert", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "owner"=>{ }}
HTTP 状态代码
首先,30x
响应意味着 "Resource Moved"。
301
响应被许多 SEO 人员用来表示资源的永久迁移。 302
不太常见,但意思还是差不多。
每次发送和接收 HTTP 请求时,您都会收到一个状态代码。典型的是 200
响应 -- status success!
您看到的是正在运行的 redirect_to
命令 -
if @owner.save!
flash[:notice] = ...
redirect_to owners_path
我以前从未使用过 PAW,但我认为它只是给你服务器的纯响应,在这种情况下是 30x
"Resource Moved"代码。
我希望典型的浏览器请求加载重定向的路由并在屏幕上显示它的收益。
服务器
作为对此进行测试的一种方法,您应该在浏览器中尝试相同的交易:
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
),然后您就可以通过浏览器访问它。
你正在尝试使用这个 PAW 东西,这没问题,但在应用程序的用户交互性方面没有给你太多灵活性(例如,提交真实表格等)...
对于您的情况,我会执行以下操作:
#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 请求的处理...
无论何时向 Web 应用程序发送一段交易数据,都是通过 HTTP 请求进行的。 HTTP 请求只是通过 "Internet".
发送数据的一种方式对于基于 Rails 的应用程序,这意味着每次您 "do" 应用程序中的某些内容时,您 确实 向您的应用程序发送 HTTP 请求网络服务器。 Rails 解释此请求并发送 响应 。这个回复就是你的问题。
您询问的是接收 302
响应 - 这是 Web 服务器表示您已被重定向的方式。老实说,这是非常基本的东西;您的浏览器可以处理其中的大部分内容。
可以找到很棒的教程here:
好的,那么你的错误如下:
Can't verify CSRF token authenticity
稍后我可以对此进行详细说明,但现在,您可能需要查找此解决方案:WARNING: Can't verify CSRF token authenticity in case of API development