aboutsummaryrefslogtreecommitdiffstats
path: root/app/controllers/user_controller.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers/user_controller.rb')
-rw-r--r--app/controllers/user_controller.rb41
1 files changed, 20 insertions, 21 deletions
diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb
index 084bbbc81..2f12c8319 100644
--- a/app/controllers/user_controller.rb
+++ b/app/controllers/user_controller.rb
@@ -4,7 +4,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: user_controller.rb,v 1.7 2007-10-31 17:25:29 francis Exp $
+# $Id: user_controller.rb,v 1.8 2007-11-01 14:45:56 francis Exp $
class UserController < ApplicationController
# XXX See controllers/application.rb simplify_url_part for reverse of expression in SQL below
@@ -16,31 +16,35 @@ class UserController < ApplicationController
def signin
# The explict signin link uses this to store where it is to go back to
if params[:r]
- session[:intended_uri] = params[:r]
- session[:intended_params] = nil
+ post_redirect = PostRedirect.new(:uri => params[:r], :post_params => {})
+ post_redirect.save!
+ params[:token] = post_redirect.token
end
if not params[:user]
# First time page is shown
- render :template => 'user_accounts/signin' and return
+ render :template => 'user_accounts/signin'
+ return
else
@user = User.authenticate(params[:user][:email], params[:user][:password])
if @user
# Successful login
session[:user] = @user.id
- post_redirect session[:intended_uri], session[:intended_params] and return
+ post_redirect = PostRedirect.find_by_token(params[:token])
+ do_post_redirect post_redirect.uri, post_redirect.post_params
+ return
else
if User.find(:first, :conditions => [ "email = ?", params[:user][:email] ])
# Failed to authenticate
flash[:error] = "Password not correct, please try again"
@user = User.new(params[:user])
- render :template => 'user_accounts/signin' and return
+ render :template => 'user_accounts/signin'
+ return
else
- # "I am new to FOIFA"
- session[:email] = params[:user][:email]
- session[:password] = params[:user][:password]
- session[:first_time] = true
- redirect_to :action => 'signup' and return
+ # Create a new account
+ params[:first_time] = true
+ self.signup
+ return
end
end
end
@@ -48,25 +52,20 @@ class UserController < ApplicationController
# Create new account form
def signup
- # Default to value saved from signin form
- params[:user] ||= { :email => session[:email] }
- params[:user] ||= { :password => session[:password] }
-
# Make the user and try to save it
@user = User.new(params[:user])
if not @user.save
# First time get to form (e.g. from signin) , don't show errors
- if session[:first_time]
- @first_time = true
- @user.errors.clear
- session[:first_time] = false
- end
+ @first_time = params[:first_time]
+ @user.errors.clear if @first_time
# Show the form
render :template => 'user_accounts/signup'
else
# New user made, redirect back to where we were
session[:user] = @user.id
- post_redirect session[:intended_uri], session[:intended_params] and return
+ post_redirect = PostRedirect.find_by_token(params[:token])
+ do_post_redirect post_redirect.uri, post_redirect.post_params
+ return
end
end