Question

Je suis super nouveau sur Ruby sur Rails. J'essaie de créer un système d'authentification en utilisant Authlogic (suivant cela Didacticiel). L'erreur que j'obtiens est juste après avoir soumis le formulaire de connexion:

No route matches "/user_sessions/%23%3CUserSession:0x103486aa8%3E"

Étonnamment, l'URL de la page juste après la soumission du formulaire, ce qui soulève également l'erreur est:

http://localhost:3000/user_sessions/%23%3CUserSession:0x103486aa8%3E

Je n'ai aucune idée de ce que j'ai fait de mal et d'où vient cette étrange chose du code d'utilisateur !!!

C'est à quoi ressemble mon formulaire de connexion:

<% form_for @user_session do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :username %><br />
    <%= f.text_field :username%>
  </p>
  <p>
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </p>
  <p><%= f.submit "Submit" %></p>
<% end %>

Voici ma classe d'utilisateurs:

class UserSession < Authlogic::Session::Base
  def to_key
    new_record? ? nil : [ self.send(self.class.primary_key) ]
  end
end

et le créer action de mon USERSESSION Controller:

def create
    @user_session = UserSession.new(params[:user_session])
    if @user_session.save
      flash[:notice] = "Login successful!"
      redirect_back_or_default root_path
    else
      render :action => :new
    end
  end

Méthode "redirect_back_or_default" dans ApplicationController:

def redirect_back_or_default(default)
  redirect_to(session[:return_to] || default)
  session[:return_to] = nil
end

Et enfin tout ce qui concerne l'utilisateur routes.rb:

resources :user_sessions

match 'login' => "user_sessions#destroy", :as => :login
match 'logout' => "user_sessions#destroy", :as => :logout

Ce sont les codes qui je La pensée pourrait être impliquée dans l'obtention de cette erreur. Si je devais ajouter un peu plus de code pour le rendre plus clair, veuillez me le faire savoir.

Était-ce utile?

La solution

Ok, d'abord, vous avez un mauvais itinéraire:

    match '/login', :to => 'user_sessions#new', :as => 'login'

noter la new à la place de destroy

De plus, le TO_KEY n'est pas nécessaire dans les versions ultérieures - j'utilise Rails 3 et je ne l'ai pas dans mon modèle d'utilisateur.

Autres conseils

Besoin de changer votre itinéraire pour ne pas correspondre à la connexion pour détruire. Voici le paramètre d'itinéraire que j'ai ... (à partir de "Agile Web Development with Rails").

controller :user_sessions do

  get 'login' => :new
  post 'login' => :create
  delete 'logout' => :destroy
end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top