Question

I do not know if my title was perhaps a little misleading. But here's what I really need help with.

I'm making a get on this url:

$.get("/fb/login/"+fbEmail, function(data){
   console.log(data);
});

This is my routes:

GET /fb/login/:email  presentation.controllers.Auth.authenticateSocialNetwork(email:String)

And here's my action:

def authenticateSocialNetwork(email:String) = Action {
   if(!editorRepo.getEditorByEmail(email).isEmpty){
      Redirect(routes.Profile.editorProfile).withSession(Security.username -> email)
   } else {
      Redirect(routes.Profile.initiatorProfile).withSession(Security.username -> email)
   }
}

My expectation from this is that my action gets called and fires of what's inside it. In other words, Redirecting.

But what actually happens, which is not so illogical, is that my $.get call gets a response with my redirect's.

How do I actually call my action-method, without sending a response to javascript?


Here's my function in javascript, posting this snippet for it to be more clear in our discussion in the comments above.

function addClickToLoginButtons(){
$("#loginWithFb").click(function(){
    FB.login(function(response){
        if(response.authResponse){
            FB.api('/me', function(response){
                var fbEmail = response.email;
                $.get("/fb/isRegisteredAtNetwork/"+fbEmail+"/facebook", function(data){
                    if(data == "true"){
                        if(confirm("Do you want to log with facebook-account "+fbEmail+"?")){
                                $.get("/fb/login/"+fbEmail, function(data){  *//HERE'S WHERE I WOULD WANT TO CALL MY METHOD IN SCALA*
                                    console.log(data);
                                });
                        } else {
                            console.log("try again with a different facebook-account");
                        } //end confirm else
                    } else {
                        console.log("Logged in not in database");
                    }//end get else
                });
            });
        } else {
            console.log("permission not granted");
        } // end authResponse else
    }, {scope: 'email'});
});
}
Was it helpful?

Solution

In your action, instead of returning Redirect, return Ok(urlToBeRedirectedTo).withSession(...). Once this response received in the javascript code, do your stuff and then call window.location = urlToBeRedirectedTo;.

This will add the email to the session, and will redirect to the wanted URL.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top