Question

I'm super new to Ruby on Rails. I'm trying to make an authentication system using Authlogic (following this tutorial). The error that I'm getting is right after I submit the login form:

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

Surprisingly the URL of the page right after the form is submitted which also brings up the error is:

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

I have no idea what I have done wrong and where that weird UserSession code thing is coming from!!!

This is how my login form looks like:

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

Here is my UserSession class:

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

and the create action of my UserSessionController:

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

"redirect_back_or_default" method in ApplicationController:

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

And lastly everything related to user_sessions in routes.rb:

resources :user_sessions

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

These are the codes that I thought could be involved in getting that error. If I should add some more code to make it more clear please let me know.

Was it helpful?

Solution

Ok, first, you have a bad route:

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

note the new instead of destroy

also, the to_key is not needed in later versions - I'm using rails 3 and don't have it in my UserSession Model.

OTHER TIPS

Definitely need to change your route to not match login to destroy. Here's the route setting I have... (from "Agile Web Development with Rails" example).

controller :user_sessions do

  get 'login' => :new
  post 'login' => :create
  delete 'logout' => :destroy
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top