Skip to content

Instantly share code, notes, and snippets.

@awongh
Last active November 3, 2015 19:47
Show Gist options
  • Save awongh/527abcc875fdc25ac3b3 to your computer and use it in GitHub Desktop.
Save awongh/527abcc875fdc25ac3b3 to your computer and use it in GitHub Desktop.

User Auth Rails app: What we're adding:

  • User model
rails g model user username:string password_hash:string
  • user_id foreign key in tables (user has many cars)

generate a migration

rails generate migration addUserId

add the foreign key to the cars table

class AddUserId < ActiveRecord::Migration
  def change
    add_reference :cars, :user
  end
end
  • a login form

this requires some routes:

  resources :users

  get    'login'   => 'sessions#new'
  post   'login'   => 'sessions#create'
  delete 'logout'  => 'sessions#destroy'
<%= form_for(:session, url: login_path) do |f| %>

    <%= f.label :username %>
    <%= f.text_field :username %>

    <%= f.label :password %>
    <%= f.password_field :password %>

  <%= f.submit "log in"%>
<% end %>
  • a register form
  post   'login'   => 'sessions#create'
<%= form_for(:user, url: login_path) do |f| %>

    <%= f.label :username %>
    <%= f.text_field :username %>

    <%= f.label :password %>
    <%= f.password_field :password %>

    <%= f.label :password_confirmation %>
    <%= f.password_field :password_confirmation %>

  <%= f.submit "log in"%>
<% end %>
  • an edit user form

  • logout link

<%= link_to 'logout!', logout_path, :method => 'delete' %>
  • logout session destroy method
session_reset
  • cars controller
def index                                                           
    if( ! session[:user].nil? )

      @current_user = User.find( session[:user]['id'] )

      @cars = @current_user.cars

    else

      @cars = Car.all

    end
end
  • sessions create
  • require at the top of your controller: require 'digest/md5'
def create                                                                                [15/958]

    password = login_params[:password_hash]
    username = login_params[:username]

    user_object = User.find_by_username( username )

    password_hash = Digest::MD5.hexdigest( password )

    if( user_object.password_hash == password_hash )

      session[:user] = user_object

      redirect_to '/'
    else
      redirect_to '/login'
    end

  end
  • seed file:
require 'digest/md5'

password_hash = Digest::MD5.hexdigest( "bannanna" )

user1 = User.create( username: "thom", password_hash: password_hash )
user2 = User.create( username: "akira", password_hash: password_hash )
User.create( username: "joe", password_hash: password_hash )
User.create( username: "jason", password_hash: password_hash )


user1.cars.create(make: "Jeep", model: "Cherokee", color: "red", year: nil)

user1.cars.create(make: "Ford", model: "Taurus", color: "doodoo", year: nil)

user2.cars.create(make: "Jeep", model: "Wrangler", color: "yellow", year: 2003)

user2.cars.create(make: "Nissan", model: "Juke", color: "black", year: 2012)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment