Using server side Facebook api a typical workflow can be:
- User click in "login with Facebook"
- A popUp window with the Facebook login appears
- The user put his Facebook username and password and click submit
- You receive a callback from Facebook with a token.
- With this token you go to Facebook auth service (https://graph.facebook.com/oauth/access_token with your concrete parameters), you receive and access_token.
- with this access_token you can get the user information, user id in Facebook, username, email, picture, etc,etc.
- With this information you can check if this user already exists in your system or create a new one if is the fist time.
This is the typical Oauth2 workflow, very confusing the first time you use it. The good thing is that other social networks like LinkedIn, Twitter or Google+ use a very similar approach based in Oauth (with some differences for example in the way you express the concrete permissions you want and some other details).
Another option its to use the Facebook js api to do the login, this option its explained in the Facebook docs: https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.1 (the option with FB.login()
it's in my opinion easier and cleaner). The problem with this approach its that it's not very standard and each provider can have very different approaches. (and if you use a lot of login providers you need to load a lot of js libraries only for login).