Skip to content

Commit 2cc4218

Browse files
committed
Added remember me feature
1 parent ac3839a commit 2cc4218

File tree

5 files changed

+64
-36
lines changed

5 files changed

+64
-36
lines changed
Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,37 @@
11
class SessionsController < ApplicationController
2-
skip_before_filter :require_login, :only => [:new, :create]
2+
skip_before_filter :require_login, :only => [:new, :create, :login]
33
def new
44
end
5-
6-
def create
7-
user = User.authenticate(
8-
params.has_key?(:email) ? params[:email] : nil,
9-
params[:password])
10-
if user
11-
session[:user_id] = user.id
12-
redirect_to root_url, :notice => "Logged in!"
5+
6+
def login
7+
@user = User.new
8+
if logged_in?
9+
redirect_to root_url
10+
elsif !logged_in? && cookies.signed[:user_id]
11+
user = User.auth_with_cookie(cookies.signed[:user_id])
12+
session[:user_id] = cookies.signed[:user_id]
13+
redirect_to root_url, :notice => "Welcome back!"
14+
elsif request.post?
15+
user = User.authenticate(
16+
params.has_key?(:email) ? params[:email] : nil,
17+
params[:password])
18+
if user
19+
if params[:remember_me] == 'yes'
20+
cookies.permanent.signed[:user_id] = user.id
21+
end
22+
session[:user_id] = user.id
23+
redirect_to root_url, :notice => "Logged in!"
24+
else
25+
redirect_to root_url, :notice => "Invalid email or password"
26+
end
1327
else
14-
redirect_to root_url, :notice => "Invalid email or password"
28+
render "home"
1529
end
1630
end
17-
31+
1832
def destroy
1933
session[:user_id] = nil
34+
cookies.delete :user_id
2035
redirect_to root_url, :notice => "Logged out!"
2136
end
2237
end

app/controllers/users_controller.rb

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class UsersController < ApplicationController
2-
skip_before_filter :require_login, :only => [:new, :create, :home]
2+
skip_before_filter :require_login, :only => [:new, :create, :home, :login]
33
def new
44
@user = User.new
55
end
@@ -27,7 +27,7 @@ def show
2727
end
2828
end
2929
end
30-
30+
3131

3232
def create
3333
@user = User.new(params[:user])
@@ -37,16 +37,17 @@ def create
3737
render "new"
3838
end
3939
end
40-
40+
4141
def home
4242
@user = User.new
43-
4443
if current_user
4544
render "welcome"
45+
elsif cookies.signed[:user_id]
46+
redirect_to log_in_path
4647
else
4748
render "home"
4849
end
49-
end
50+
end
5051

5152
def edit
5253
@user = User.find(params[:id])
@@ -63,7 +64,7 @@ def update
6364
else
6465
format.html { render :action => "edit" }
6566
format.json { render :json => @user.errors,
66-
:status => :unprocessable_entity }
67+
:status => :unprocessable_entity }
6768
end
6869
end
6970
end
@@ -73,12 +74,12 @@ def destroy
7374
redirect_to users_path, :notice => "You cant delete yourself !"
7475
else
7576
@user = User.find(params[:id])
76-
@user.delete
77+
@user.delete
7778

7879
respond_to do |format|
7980
format.html { redirect_to users_path, :notice => 'User deleted' }
8081
format.json { head :no_content }
81-
end
82+
end
8283
end
8384
end
8485
end

app/models/user.rb

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
class User < ActiveRecord::Base
22
attr_accessible :username, :email, :password, :password_confirmation
3-
3+
44
attr_accessor :password
55
before_save :encrypt_password
6-
6+
77
validates_confirmation_of :password
88
validates_presence_of :password, :on => :create
99
validates_presence_of :username
1010
validates_presence_of :email
1111
validates_uniqueness_of :email
1212
validates_uniqueness_of :username
13-
13+
1414
def self.authenticate(email, password)
15-
15+
1616
user = User.is_a_valid_email(email) ? find_by_email(email) : find_by_username(email)
1717

1818
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
@@ -21,7 +21,15 @@ def self.authenticate(email, password)
2121
nil
2222
end
2323
end
24-
24+
25+
def self.auth_with_cookie(id)
26+
user = find_by_id(id)
27+
if user
28+
user
29+
else
30+
nil
31+
end
32+
end
2533

2634
def self.is_a_valid_email(email)
2735
# Check the number of '@' signs.

app/views/sessions/_form.html.haml

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
= form_tag sessions_path, :class => '' do
2-
%div.form-group
3-
= label_tag :email
4-
= text_field_tag :email, params[:email], :placeholder => 'Email or Username', :class => 'form-control'
1+
= form_tag auth_path, :class => '' do
2+
%div.form-group
3+
= label_tag :email
4+
= text_field_tag :email, params[:email], :placeholder => 'Email or Username', :class => 'form-control'
55

6-
%div.form-group
7-
= label_tag :password
8-
= password_field_tag :password, nil, :placeholder => 'Password', :class => 'form-control'
9-
%p.button= submit_tag "Log in", :class => 'btn btn-primary'
6+
%div.form-group
7+
= label_tag :password
8+
= password_field_tag :password, nil, :placeholder => 'Password', :class => 'form-control'
9+
%div.form-group
10+
= check_box_tag 'remember_me', 'yes', true
11+
= label_tag :remember_me
12+
%p.button= submit_tag "Log in", :class => 'btn btn-primary'

config/routes.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@
33
root :to => "users#home"
44

55
get "log_out" => "sessions#destroy", :as => "log_out"
6-
get "log_in" => "sessions#new", :as => "log_in"
7-
post "sessions" => "sessions#create"
6+
get "log_in" => "sessions#login", :as => "log_in"
7+
post "auth" => "sessions#login"
8+
89
get "sign_up" => "users#new", :as => "sign_up"
9-
10+
1011
resources :users
11-
12+
1213
# The priority is based upon order of creation:
1314
# first created -> highest priority.
1415

0 commit comments

Comments
 (0)