diff options
Diffstat (limited to 'app/controllers/user_controller.rb')
-rw-r--r-- | app/controllers/user_controller.rb | 41 |
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 |