Skip to content

Instantly share code, notes, and snippets.

@danielRomero
Last active August 29, 2015 14:23
Show Gist options
  • Save danielRomero/01871728ce9a92203d44 to your computer and use it in GitHub Desktop.
Save danielRomero/01871728ce9a92203d44 to your computer and use it in GitHub Desktop.
Manage rails sessions and current_user
module SessionsHelper
def sign_in(user)
logger.debug "Starting session..."
reset_session
remember_token = SecureRandom.urlsafe_base64.to_s
create_session_cookie(remember_token)
user.update_attribute(:remember_token, Digest::SHA2.hexdigest(remember_token))
current_user = user
logger.debug "Session started for #{user.class.to_s} with id #{user.id}"
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= user_from_remember_token
end
def sign_out
logger.debug "closing session..."
current_user = nil
delete_session_cookie
reset_session
end
def signed_in?
!current_user.nil?
end
def admin?
return (signed_in? and (current_user.rank == 5))
end
private
def user_from_remember_token
remember_token = cookies.signed[:remember_token]
User.find_by(remember_token: Digest::SHA2.hexdigest(remember_token)) if !remember_token.blank?
end
def create_session_cookie(remember_token)
cookies.signed[:remember_token] = {
value: remember_token,
expires: 1.year.from_now
}
end
def delete_session_cookie
cookies.signed[:remember_token] = {
value: nil,
expires: 1.year.ago
}
cookies.delete :remember_token
end
end
@danielRomero
Copy link
Author

Maybe you want to enable "active_record_store"
To do this, only add this line to your gemfile
gem 'activerecord-session_store', github: 'rails/activerecord-session_store'
then
bundle install
and this migration
rails generate active_record:session_migration
rake db:migrate
finally on your config_initializers/session_store.rb
Rails.application.config.session_store :active_record_store, key: '_YOUR_APP_NAME_session'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment