Cod*_*ohn 5 post ruby-on-rails http http-status-code-302
我在Ruby上运行我的Rails后端,我想将数据发布到此服务器.但如果我用PAW做一个Post-request,我会被重定向.我是Http Requests的新手.有人可以解释我的功能以及如何使用http post请求吗?
我想在我的服务器的datanase(sqlite3)上发布信息.
这是如何运作的?请解释:)谢谢.问候约翰
这是代码:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
控制台日志:
来自网络请求(http://192.168.2.144:3000/owners?name=hans&password=hans321&password_confirmation=hans321)
在2015-10-01 12:12:18开始获取"/ owner?name = hans&password = [FILTERED]&password_confirmation = [FILTERED]"for 192.168.2.144 +0200无法从192.168.2.144渲染控制台!允许的网络:127.0.0.1,:: 1,127.0.0.0/127.255.255.255由OwnersController处理#index为HTML参数:{"name"=>"hans","password"=>"[FILTERED]","password_confirmation "=>"[过滤]"}所有者加载(0.1ms)选择"所有者".*FROM"所有者"WHERE"所有者"."id"=?LIMIT 1 [["id",2]]所有者加载(0.1ms)选择"所有者".*FROM"所有者"在布局/应用程序内呈现所有者/ index.html.erb(1.8ms)在60ms内完成200 OK(视图:58.9ms | ActiveRecord:0.2ms)
它告诉200确定但数据库中没有任何反应.
来自Paw-Request(所以我可以使用post.顺便说一下.我如何在浏览器请求中使用post?
在2015-10-01 12:12:45开始POST"/ owner?name = hans&password = [FILTERED]&password_confirmation = [FILTERED]"for 192.168.2.144 +0200无法从192.168.2.144渲染控制台!允许的网络:127.0.0.1,:: 1,127.0.0.0/127.255.255.255由OwnersController处理#create as HTML参数:{"name"=>"hans","password"=>"[FILTERED]","password_confirmation "=>"[FILTERED]"}无法验证CSRF令牌真实性重定向到http://192.168.2.144:3000/过滤器链暂停为:authenticate_user呈现或重定向完成302在1ms内找到(ActiveRecord:0.0ms)
似乎CRSF认证失败了..
编辑:
起初:对Rich Peck!这对我帮助很大.谢谢!!我非常感谢你的努力.
我接近解决方案..我的问题是:我不能把正确的参数放在网址中.token-auth被禁用以进行测试.所以它不重要.
params应该是这样的:参数:{"utf8"=>"✓","authenticity_token"=>"q9JvFhoSUgfydFTvh18JHbIIdKNDjnOS9m/trVBu9EHPP04xGsO69zPh1BFZBI1Ev1YcnOTiPmaAiPWOSkm5Xg ==","owner"=> {"name"=>"Hubert","password"= >"[FILTERED]","password_confirmation"=>"[FILTERED]"},"commit"=>"创建所有者"}
而不是在我的请求中:参数:{"name"=>"Hubert","password"=>"[FILTERED]","password_confirmation"=>"[FILTERED]","owner"=> {}}
HTTP状态代码
首先,30x响应意味着"资源移动".
301 许多搜索引擎优化人员使用响应来表示资源的永久重新定位. 302不太常见,但仍然意味着类似的事情.
每次发送和接收HTTP请求时,您都将收到状态代码.典型的是200响应 - 状态成功!
你所看到的是redirect_to行动中的命令 -
if @owner.save!
flash[:notice] = ...
redirect_to owners_path
Run Code Online (Sandbox Code Playgroud)
我以前从未使用过PAW,但我认为它只是给你服务器的纯响应,在这种情况下是一个30x "资源移动"代码.
我希望一个典型的浏览器请求加载重定向的路由并在屏幕上显示其产量.
服务器
作为测试方法,您应该在浏览器中尝试相同的事务:
lvh.me:3000/orders
Run Code Online (Sandbox Code Playgroud)
(lvh.me是一个路由到您自己的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
Run Code Online (Sandbox Code Playgroud)
您还需要查看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 %>
Run Code Online (Sandbox Code Playgroud)
然后lvh.me:3000/orders/new,您将访问并提交表单.这将告诉你它是如何响应的!
HTTP
好的,这是处理HTTP请求...
每当您向Web应用程序发送一条事务数据时,都可以通过HTTP请求执行此操作.HTTP请求只是通过"Internet"发送数据的一种方式.
使用基于Rails的应用程序,这意味着每次在应用程序中"执行"操作时,您实际上都是向Web服务器发送HTTP请求.Rails解释此请求并发送响应.这个回答是你的问题所在.
你问的是收到302回复 - 这是网络服务器说你被重定向的方式.说实话,这是非常基本的东西; 您的浏览器处理大部分内容.
一个伟大的教程,可以发现这里:
好吧那你的错误如下:
无法验证CSRF令牌的真实性
我稍后可以详细说明,但是现在,您可能想要查找此解决方案:警告:在API开发的情况下无法验证CSRF令牌的真实性
| 归档时间: |
|
| 查看次数: |
9067 次 |
| 最近记录: |