]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/user_controller.rb
Make /user/new handle already logged in users better
[rails.git] / app / controllers / user_controller.rb
index 86689644c8032b5139aae2dcfa7b5ed1dabd75c8..3622b037d683abac9ce4f44c1cc7b243f98ca439 100644 (file)
@@ -253,16 +253,21 @@ class UserController < ApplicationController
   def new
     @title = t 'user.new.title'
     @referer = params[:referer] || session[:referer]
-    @user = User.new(:email => params[:email],
-                     :email_confirmation => params[:email],
-                     :display_name => params[:nickname],
-                     :openid_url => params[:openid])
 
-    if session[:user]
+    if @user
       # The user is logged in already, so don't show them the signup
       # page, instead send them to the home page
-      redirect_to :controller => 'site', :action => 'index'
-    elsif not params['openid'].nil?
+      if @referer
+        redirect_to @referer
+      else
+        redirect_to :controller => 'site', :action => 'index'
+      end
+    elsif params.key?(:openid)
+      @user = User.new(:email => params[:email],
+                       :email_confirmation => params[:email],
+                       :display_name => params[:nickname],
+                       :openid_url => params[:openid])
+
       flash.now[:notice] = t 'user.new.openid association'
     end
   end
@@ -522,7 +527,7 @@ private
     end
 
     # Start the authentication
-    authenticate_with_open_id(openid_expand_url(openid_url), :required => required) do |result, identity_url, sreg, ax|
+    authenticate_with_open_id(openid_expand_url(openid_url), :method => :get, :required => required) do |result, identity_url, sreg, ax|
       if result.successful?
         # We need to use the openid url passed back from the OpenID provider
         # rather than the one supplied by the user, as these can be different.
@@ -570,7 +575,7 @@ private
   def openid_verify(openid_url, user)
     user.openid_url = openid_url
 
-    authenticate_with_open_id(openid_expand_url(openid_url)) do |result, identity_url|
+    authenticate_with_open_id(openid_expand_url(openid_url), :method => :get) do |result, identity_url|
       if result.successful?
         # We need to use the openid url passed back from the OpenID provider
         # rather than the one supplied by the user, as these can be different.