summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2014-11-15 08:50:53 -0700
committermo khan <mo@mokhan.ca>2014-11-15 08:50:53 -0700
commitbff28ab6769f9d060511ff0e5c5c54e2a3df764b (patch)
tree38221760846a7b11da368cb220da2f09784ff47e
parentd1aa4c6c0f292d5961d2a13cb20b63151c28be0d (diff)
introduce secure auth cookie.
-rw-r--r--app/controllers/sessions_controller.rb1
-rw-r--r--app/models/session.rb9
-rw-r--r--spec/controllers/sessions_controller_spec.rb4
3 files changed, 14 insertions, 0 deletions
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index b78e660..a6e9a12 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -13,6 +13,7 @@ class SessionsController < ApplicationController
def create
if @session = @login_command.run(self)
session[:user_session_id] = @session.id
+ cookies.signed[:raphael] = @session.access(request)
redirect_to root_path(anchor: '')
else
flash[:error] = I18n.translate(:invalid_credentials)
diff --git a/app/models/session.rb b/app/models/session.rb
index c66afec..253cfa0 100644
--- a/app/models/session.rb
+++ b/app/models/session.rb
@@ -1,3 +1,12 @@
class Session < ActiveRecord::Base
belongs_to :user
+
+ def access(request)
+ {
+ value: id,
+ httponly: true,
+ secure: Rails.env.production? || Rails.env.staging?,
+ expires: 2.weeks.from_now
+ }
+ end
end
diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb
index 2eb2f95..9100777 100644
--- a/spec/controllers/sessions_controller_spec.rb
+++ b/spec/controllers/sessions_controller_spec.rb
@@ -48,6 +48,10 @@ describe SessionsController do
expect(session[:user_session_id]).to eql(last_session.id)
expect(last_session.ip_address).to eql("0.0.0.0")
end
+
+ it 'assigns a session key to a secure cookie' do
+ expect(cookies.signed[:raphael]).to eql(Session.last.id)
+ end
end
end