Pregunta

Soy súper nuevo en Ruby en Rails. Estoy tratando de hacer un sistema de autenticación usando AuthLogic (siguiendo esto tutorial). El error que recibo es justo después de enviar el formulario de inicio de sesión:

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

Sorprendentemente, la URL de la página justo después de que se envíe el formulario, lo que también plantea el error es:

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

¡No tengo idea de lo que he hecho mal y de dónde viene ese extraño código del código de usuarios!

Así es como se ve mi forma de inicio de sesión:

<% 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 %>

Aquí está mi clase de usuarios:

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

y el crear acción de mi UserssionSessionController:

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étodo "redirect_back_or_default" en Application Controller:

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

Y, por último, todo lo relacionado con user_sessions en rutas.rb:

resources :user_sessions

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

Estos son los códigos que yo El pensamiento podría estar involucrado en obtener ese error. Si debo agregar más código para dejarlo más claro, hágamelo saber.

¿Fue útil?

Solución

Ok, primero, tienes una mala ruta:

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

nota la new en vez de destroy

Además, el TO_Key no es necesario en versiones posteriores: estoy usando Rails 3 y no lo tengo en mi modelo de usuario.

Otros consejos

Definitivamente necesito cambiar su ruta para no igualar el inicio de sesión para destruir. Aquí está la configuración de ruta que tengo ... (del ejemplo de "Desarrollo web ágil con Rails").

controller :user_sessions do

  get 'login' => :new
  post 'login' => :create
  delete 'logout' => :destroy
end
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top