2011-10-20 13 views
7

mam dość standardową metodę uwierzytelnieniarespond_with prosi o lokalizacji w przypadku błędu

private 

    def authenticate_user 
    @current_user = User.find_by_authentication_token(params[:token]) 
    unless @current_user 
     error = { :error => "Invalid token." } 
     respond_with(error, :status => 401) 
    end 
    end 

Wołam API w celu zapewnienia Uwierzytelnij zawiedzie.

otrzymuję komunikat o błędzie informujący

ArgumentError (Nil location provided. Can't build URI.): 
    app/controllers/api/v1/base_controller.rb:13:in `authenticate_user' 

Co robię źle?

+0

Czy ten kod w 'base_controller.rb'? Która linia to linia 13? –

+0

Metoda jest prywatna, więc musimy wiedzieć, gdzie/jak jest wywoływana. Pokaż, jak/gdzie wywołujesz tę metodę w kontrolerze. –

Odpowiedz

7

Przez specyficzny smak twojego błędu, przypuszczam, że "authenticate_user" jest wywoływany jako część akcji "tworzenia".

Jeśli tak jest, uważam, że odpowiedź udzielona przeze mnie here również pomoże.

Zakładając jednak, że jest to część tworzenia uwierzytelnionej sesji, co oznacza, że ​​nie jest aktualna lokalizacja dla nowo utworzonego „zasobu”, chciałbym dostarczyć nil do lokalizacji reakcji, jak w:

... 
respond_with(error, :status => 401, :location => nil) 
... 

To będzie bardziej sensowne, gdy spojrzysz na połączoną odpowiedź. Jeśli to nadal nie ma sensu, z przyjemnością wyjaśnię to.

+0

to pomogło mi, dzięki. – ktkaushik

+0

Cześć, zrobiłem to i wciąż ten sam problem, \t \t reply_with (: ec => 200,: em => "None",: places => @places,: location => zero) – gal

+0

czy możesz mi pomóc? – gal

0

Zmieniłem respond_with do renderowania i to działało:

render json: { success: false, message: "an error" }, status: 500 
Powiązane problemy