Store the username in a cookie and use it to validate the session

This commit is contained in:
Tom Hughes 2011-11-07 17:46:15 +00:00
parent 88bf67b092
commit 5bc3054d61
2 changed files with 11 additions and 1 deletions

View file

@ -18,7 +18,10 @@ class ApplicationController < ActionController::Base
if session[:user] if session[:user]
@user = User.where(:id => session[:user]).where("status IN ('active', 'confirmed', 'suspended')").first @user = User.where(:id => session[:user]).where("status IN ('active', 'confirmed', 'suspended')").first
if @user.status == "suspended" if @user.display_name != cookies["_osm_username"]
reset_session
@user = nil
elsif @user.status == "suspended"
session.delete(:user) session.delete(:user)
session_expires_automatically session_expires_automatically
@ -37,10 +40,13 @@ class ApplicationController < ActionController::Base
elsif session[:token] elsif session[:token]
if @user = User.authenticate(:token => session[:token]) if @user = User.authenticate(:token => session[:token])
session[:user] = @user.id session[:user] = @user.id
else
reset_session
end end
end end
rescue Exception => ex rescue Exception => ex
logger.info("Exception authorizing user: #{ex.to_s}") logger.info("Exception authorizing user: #{ex.to_s}")
reset_session
@user = nil @user = nil
end end

View file

@ -336,6 +336,7 @@ class UserController < ApplicationController
token.destroy token.destroy
session[:user] = user.id session[:user] = user.id
cookies["_osm_username"] = user.display_name
if referer.nil? if referer.nil?
flash[:notice] = t('user.confirm.success') + "<br /><br />" + t('user.confirm.before you start') flash[:notice] = t('user.confirm.success') + "<br /><br />" + t('user.confirm.before you start')
@ -388,6 +389,7 @@ class UserController < ApplicationController
end end
token.destroy token.destroy
session[:user] = @user.id session[:user] = @user.id
cookies["_osm_username"] = @user.display_name
redirect_to :action => 'account', :display_name => @user.display_name redirect_to :action => 'account', :display_name => @user.display_name
else else
flash[:error] = t 'user.confirm_email.failure' flash[:error] = t 'user.confirm_email.failure'
@ -615,6 +617,8 @@ private
## ##
# process a successful login # process a successful login
def successful_login(user) def successful_login(user)
cookies["_osm_username"] = user.display_name
session[:user] = user.id session[:user] = user.id
session_expires_after 1.month if session[:remember_me] session_expires_after 1.month if session[:remember_me]