2017-10-16 23 views
5

W Rails 5.1, robię najprościej, i próbuje przekierować na pewnym błędem:Przekierowanie do GET po PUT w szynach (status: 303) nie działa

rescue_from ActionController::InvalidAuthenticityToken do 
    redirect_to new_user_session_url, status: 303 and return 
    end 

Docs pokazać, że status: 303 powinno spowodować, że przekierowanie_ zostanie wywołane jako GET, ale nadal jest to PUT.

Jak mogę ustawić to przekierowanie jako GET?

Dzięki

+0

W dokumentach (http://api.rubyonrails.org/v5.0/classes/ActionController/Redirecting.html) widzę, że 303 obejście jest dla żądań XHR. Czy to twój kontekst? Czy próbowałeś całkowicie zrezygnować z "statusu"? – hoffm

+0

Tak, próbowałem tego. Próbuje wykonać przekierowanie PUT, które również nie działa. – 99miles

+0

Na pewno o tym pomyślałeś, ale czy trasa "new_user_session" ogranicza się tylko do GET? – hoffm

Odpowiedz

1

Jeśli robisz to z Ajax, prośba jest przetwarzanie jak JS, wówczas przekierowanie nie powinny działać, ponieważ trzeba yo uzyskać odpowiedź w kompletnym przez Ajax rozmowy.

Wreszcie, należy przekierować w ramach całego callback wysyłając adres URL z kontrolerem.

Mam nadzieję, że pomaga

1

mogłem zrobić PUT pracę przekierowania w browser aw curl

# Gemfiile 
gem 'rails' 
gem 'pry' 
gem 'puma' 


# app.rb 
require 'rails' 
require 'action_controller' 
require 'rack/handler/puma' 

class InvalidAuthenticityToken < StandardError 
end 

# HelloController 
class HelloController < ActionController::Base 
    def index 
    render inline: ' 
<form action="/" method="POST"> 
    <input type="hidden" name="_method" value="put" /> 
    First name:<br> 
    <input type="text" name="firstname" value="Mickey"> 
    <br> 
    Last name:<br> 
    <input type="text" name="lastname" value="Mouse"> 
    <br><br> 
    <input type="submit" value="Submit"> 
</form> 
    ' 
    end 

    def update 
    raise InvalidAuthenticityToken 
    end 

    def redirect 
    render plain: 'you are redirected' 
    end 

    rescue_from InvalidAuthenticityToken do 
    redirect_to '/you_are_redirected' 
    end 
end 

class MyApp < Rails::Application 
end 

app = MyApp.new 
app.config.secret_key_base = 'my-secret' 
app.initialize! 
app.routes.draw do 
    get '/' => 'hello#index' 
    get '/you_are_redirected' => 'hello#redirect' 
    put '/' => 'hello#update' 
    put '/you_are_redirected' => 'hello#redirect' 
    post '/you_are_redirected' => 'hello#redirect' # for browser request 
end 

Rack::Handler::Puma.run app 

Aby uruchomić go

bundle 
bundle exec ruby app.rb 

wizytę localhost:9292 lub

curl -X PUT localhost:9292 -L 

you are redirected% 

Chciałbym pomóc

1

Żądanie nie jest http, więc status nie będzie działać. Zmień przekierowanie na: render :js => "window.location = '/users/signup'" lub jakikolwiek jest twój adres url new_user_session_path.