Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    39

    Rails: problemi di post e di get

    Salve a tutti premetto che sono un nuovo utente di rails quindi molte cose ancora non mi sono ben chiare.
    Sto cercando di implementare una finestra di login per un applicazione

    allora la vista data al mio controller è la seguente

    Codice PHP:
    <h1>Login#accesso</h1>

    <form action="/login/login" method=get>

    Username:<%= text_field_tag("username")%>



    Password:<%=text_field_tag("password")%>



    <%=
    submit_tag "Accedi" %>
    </
    form
    il form fa riferimento al metodo login del controller login (al cui interno sono presenti login ,logout,accesso)
    Ora se lascio il codice di sopra con il metodo get il tutto funziona, cioè riesco ad "aprire" il metodo login del controller login.
    Diversamente se uso il metodo post di invio dei dati mi compare questa schermata:

    ActionController::InvalidAuthenticityToken in LoginController#login

    ActionController::InvalidAuthenticityToken

    RAILS_ROOT: /home/corvallo/Unisalento/applicazione
    Application Trace | Framework Trace | Full Trace

    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/request_forgery_protection.rb:79:in `verify_authenticity_token'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/callbacks.rb:178:in `evaluate_method'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/callbacks.rb:166:in `call'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/filters.rb:225:in `call'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/filters.rb:629:in `run_before_filters'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/filters.rb:615:in `call_filters'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/filters.rb:610:in `perform_action_with_filters'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/benchmarking.rb:68:in `block in perform_action_with_benchmark'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/core_ext/benchmark.rb:17:in `block in ms'
    /usr/lib/ruby/1.9.1/benchmark.rb:309:in `realtime'
    /usr/lib/ruby/gems/1.9.1/gems/activesupport-2.3.5/lib/active_support/core_ext/benchmark.rb:17:in `ms'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/benchmarking.rb:68:in `perform_action_with_benchmark'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/rescue.rb:160:in `perform_action_with_rescue'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/flash.rb:146:in `perform_action_with_flash'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/base.rb:532:in `process'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/filters.rb:606:in `process_with_filters'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/base.rb:391:in `process'
    /usr/lib/ruby/gems/1.9.1/gems/actionpack-2.3.5/lib/action_controller/base.rb:386:in `call'

    Nella guida che stavo leggendo per imparare ad usare rails, viene usato il method post
    Proprio non riesco a capire del perchè di quest'errore. Sto sbagliando qualcosa?
    Ringrazio anticipatamente tutti

  2. #2
    Il tuo problema è che non inserisci l'autenticity token che serve per validare le chiamate post.
    E' un controllo di sicurezza attivo di default su Ruby.

    Di norma non si usa mai scrivere un form a mano ma si adottano gli appositi helper proprio perché quest'ultimi inglobano una serie di automatismi funzionali all'applicazione.
    Se scrivi form a mano, allora devi includere l'autenticity token.

    Stessa cosa vale per le URL. Non si scrivono mai a mano, si usano le regole di routing. Non sapendo come hai chiamato la regola di routing per il login, scrivo la versione estesa con url_for

    codice:
    <h1>Login#accesso</h1> 
    
    <% form_tag url_for(:controller => "login", :action => "login"), :method => :post do %>
    Username:<%= text_field_tag("username")%> 
    
    
     
    Password:<%=text_field_tag("password")%> 
    
    
     
    <%=submit_tag "Accedi" %> 
    <% end %>

  3. #3
    aggiungendo al tuo controller

    skip_before_filter :verify_authenticity_token

    disabiliti la protezione...ma te lo sconsiglio.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.