Mike
Mike

Reputation: 374

Log out and delete user in ruby on rails

On my ruby on rails site, I want users to only be temporary, so every time a user logs out, I want it to also delete the user from the database. How do I do this?

Link to logout, I want this to also delete the current user from the database:

<%= link_to "Log out", logout_path, method: "delete" %>

Sessions controller:

class SessionsController < ApplicationController

  before_action :require_none, only: [:new]

  def new
  end

  def create
    @user = User.find_by_username(params[:session][:username])
    if @user && @user.authenticate(params[:session][:password])
      session[:user_id] = @user.id
      redirect_to '/home'
    else
      redirect_to '/login'
    end 
  end

  def destroy      
    session[:user_id] = nil     
    redirect_to '/forsale' 
  end  

end

Users controller:

class UsersController < ApplicationController

  before_action :require_none, only: [:new]

  def new
    @user = User.new
  end

  def create 
    @user = User.new(user_params) 
    if @user.save 
      session[:user_id] = @user.id 
      redirect_to '/home' 
    else 
      redirect_to '/signup' 
    end 
  end 

  private
    def user_params

      params.require(:user).permit(:name, :username, :password);
    end

end

Routes.rb

Rails.application.routes.draw do

  # The priority is based upon order of creation: first created -> highest priority.
  # See how all your routes lay out with "rake routes".

  # You can have the root of your site routed with "root"
  root 'welcome#index'

  get '/login' => 'sessions#new'
  post '/login' => 'sessions#create'
  delete '/logout' => 'sessions#destroy'
  get '/logout' => 'sessions#destroy'
  resources :sessions


  get 'signup'  => 'users#new' 
    resources :users

  get '/home' => 'home#view'

  get '/forsale' => 'forsale#view'

  get '/contact' => 'contact#view'

  get '/about' => 'about#view'

end

Upvotes: 1

Views: 12115

Answers (1)

MilesStanfield
MilesStanfield

Reputation: 4639

If you want to destroy the user record when you log out then given your current code, you can probably just do this

class SessionsController < ApplicationController
  ...
  def destroy
    User.find(session[:user_id]).destroy      
    session[:user_id] = nil         
    redirect_to '/forsale' 
  end  
end

Upvotes: 6

Related Questions