diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb
index f8784e9e7..39209b417 100644
--- a/app/controllers/users/omniauth_callbacks_controller.rb
+++ b/app/controllers/users/omniauth_callbacks_controller.rb
@@ -33,6 +33,7 @@ class Users::OmniauthCallbacksController < ApplicationController
     auth[:session] = session
 
     authenticator = self.class.find_authenticator(params[:provider])
+    provider = Discourse.auth_providers && Discourse.auth_providers.find{|p| p.name == params[:provider]}
 
     @auth_result = authenticator.after_authenticate(auth)
 
@@ -54,9 +55,15 @@ class Users::OmniauthCallbacksController < ApplicationController
     else
       @auth_result.authenticator_name = authenticator.name
       complete_response_data
-      respond_to do |format|
-        format.html
-        format.json { render json: @auth_result.to_client_hash }
+
+      if provider && provider.full_screen_login
+        flash[:authentication_data] = @auth_result.to_client_hash.to_json
+        redirect_to @origin
+      else
+        respond_to do |format|
+          format.html
+          format.json { render json: @auth_result.to_client_hash }
+        end
       end
     end
   end
diff --git a/app/views/common/_discourse_javascript.html.erb b/app/views/common/_discourse_javascript.html.erb
index 0f67c8f1c..60bd01460 100644
--- a/app/views/common/_discourse_javascript.html.erb
+++ b/app/views/common/_discourse_javascript.html.erb
@@ -53,6 +53,11 @@
     <%- end %>
     Discourse.S3BaseUrl = '<%= Discourse.store.absolute_base_url %>';
   <%- end %>
+  <%- if !current_user && flash[:authentication_data] %>
+  Em.run.next(function(){
+    Discourse.authenticationComplete(<%=flash[:authentication_data].html_safe%>);
+  });
+  <%- end %>
 </script>
 
 <%= script 'browser-update' %>
diff --git a/app/views/users/omniauth_callbacks/complete.html.erb b/app/views/users/omniauth_callbacks/complete.html.erb
index 8bd92bcb7..f2fdcfad8 100644
--- a/app/views/users/omniauth_callbacks/complete.html.erb
+++ b/app/views/users/omniauth_callbacks/complete.html.erb
@@ -22,12 +22,8 @@
     <p><%=t "login.close_window" %></p>
 
     <script type="text/javascript">
-      if(window.opener) {
-        window.opener.Discourse.authenticationComplete(<%=@auth_result.to_client_hash.to_json.html_safe%>);
-        window.close();
-      } else {
-        window.location = <%= @origin.inspect.html_safe %>;
-      }
+       window.opener.Discourse.authenticationComplete(<%=@auth_result.to_client_hash.to_json.html_safe%>);
+       window.close();
     </script>
   </div>
 </body>