Following Hartl’s railtutorial. When I try to log in, it takes me to the correct page, but “Successful login!” does not flash on the interface. Also, when I try to sign out, I get a Routing Error: No route matches [GET] "/sessions/1".
Any help would be appreciated!
Here is my sessions_controller.rb:
class SessionsController < ApplicationController
def new
@title = "Log in"
end
def create
user = User.authenticate(params[:session][:email],
params[:session [:password])
if user.nil?
flash.now[:error] = "Invalid email/password combination."
@title = "Sign in"
render 'new'
else
flash[:success] = "Successful login!"
sign_in user
redirect_back_or user
end
end
def destroy
sign_out
redirect_to root_path
end
end
Here is my routes.rb:
SampleApp::Application.routes.draw do
#resources :users this is the line I removed to get my code to work
resource :user #this is the lined I added to get my code to work
resources :sessions, :only => [:new, :create, :destroy]
match '/sessions', :to => 'users#show'
match '/signup', :to => 'users#new'
match '/login', :to => 'sessions#new'
match '/logout', :to => 'sessions#destroy'
root :to => 'pages#home'
Changing resources :users to resource :user seems to allow me to “sign in” and “sign out” except that the flash success still does not appear on the user interface. This leads me to believe that there is an error in my create method.
Here is my sessions_helper.rb:
module SessionsHelper
def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
def current_user?(user)
user == current_user
end
def sign_out
cookies.delete(:remember_token)
self.current_user = nil
end
def redirect_back_or(default)
redirect_to(session[:return_to] || default)
clear_return_to
end
private
def user_from_remember_token
User.authenticate_with_salt(*remember_token)
end
def remember_token
cookies.signed[:remember_token] || [nil, nil]
end
def store_location
session[:return_to] = request.fullpath
end
def clear_return_to
session[:return_to] = nil
end
end
Edited: Solution posted in code.
i think you should user just
flash[:success]andflash[:error]and not theflash.nowand what link are you using for loging out?