加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – HTTP状态码302

发布时间:2020-12-17 03:42:14 所属栏目:百科 来源:网络整理
导读:我在 Ruby上运行我的Rails后端,我想将数据发布到此服务器.但如果我用PAW做一个Post-request,我会被重定向.我是Http Requests的新手.有人可以解释我的功能以及如何使用http post请求吗? 我想在我的服务器的datanase(sqlite3)上发布信息. 这是一个截图,应该解
我在 Ruby上运行我的Rails后端,我想将数据发布到此服务器.但如果我用PAW做一个Post-request,我会被重定向.我是Http Requests的新手.有人可以解释我的功能以及如何使用http post请求吗?

我想在我的服务器的datanase(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)

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,
127.0.0.0/127.255.255.255 Processing by OwnersController#create as HTML Parameters: {“name”=>”hans”,
“password_confirmation”=>”[FILTERED]”} Can’t verify CSRF token
authenticity Redirected to 07002 Filter chain
halted as :authenticate_user rendered or redirected Completed 302
Found in 1ms (ActiveRecord: 0.0ms)

似乎CRSF认证失败了..

编辑:

首先:
来到Rich Peck!这对我帮助很大.谢谢!!我非常感谢你的努力.

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

参数应该是这样的:
?参数:{“utf8”=>“?”,“authenticity_token”=>“q9JvFhoSUgfydFTvh18JHbIIdKNDjnOS9m / trVBu9EHPP04xGsO69zPh1BFZBI1Ev1YcnOTiPmaAiPWOSkm5Xg ==”,“owner”=> {“name”=>“Hubert”,“password”=> “[FILTERED]”,“password_confirmation”=>“[FILTERED]”},“commit”=>“创建所有者”}

而不是在我的要求中:
参数:{“name”=>“Hubert”,“password”=>“[FILTERED]”,“password_confirmation”=>“[FILTERED]”,“owner”=> {}}

解决方法

HTTP状态代码

首先,30倍响应意味着“Resource Moved”.

许多SEO人员使用301响应来表示资源的永久重新定位. 302并不常见,但仍然意味着类似的事情.

每次发送&接收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_confirmation)
   end
end

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

测试

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

这意味着您可以运行Rails Server(控制台中的$rails),然后您可以通过浏览器访问它.

你正试图使用??这个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请求…

enter image description here

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

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

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

一个很棒的教程可以在here找到:

enter image description here

好吧那你的错误如下:

Can’t verify CSRF token authenticity

我稍后可以详细说明,但就目前而言,您可能希望查找此解决方案:WARNING: Can’t verify CSRF token authenticity in case of API development

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读