And so first we need to create an application for authorization using Facebook, here: https://developers.facebook.com/apps/.
Maybe creating an application and configure it on Facebook should be step 1 but since this step is not described here just know that it must be completed in order to log in via Facebook to the site.
Step 1. Install yii2-authclient
Next, open the console, go to the folder with the project and install yii2-authclient using composer.
composer require --prefer-dist yiisoft/yii2-authclient
Step 2. Connect and configure yii2-authclient
Set up yii2-authclient, open the config/main.php settings file and add code to components:
//... 'authClientCollection' => [ 'class' => 'yii\authclient\Collection', 'clients' => [ 'facebook' => [ 'class' => 'yii\authclient\clients\Facebook', //'authUrl' => 'https://www.facebook.com/dialog/oauth?display=popup', 'clientId' => 'APP_CLIENT_ID', 'clientSecret' => 'APP_CLIENT_SECRET', 'attributeNames' => ['name', 'email', 'first_name', 'last_name'], ], ], ], //...
In attributeNames, you can pass the field name as a parameter that you want to get from Facebook. Parameters that can be passed to get more information about the user here: https://developers.facebook.com/docs/graph-api/reference/user.
Step 3. Configure the controller
In SiteController, add an interaction between yii2-authclient and the controller. We add the following code to the actions method:
<?php public function actions() { return [ 'auth' => [ 'class' => 'yii\authclient\AuthAction', 'successCallback' => [$this, 'oAuthSuccess'], ], ]; }
In successCallback we give the name of the action that will be called upon successful authentication. In this example, this is oAuthSuccess.
Step 4. Add the oAuthSuccess method
<?php public function oAuthSuccess($client) { $userAttributes = $client->getUserAttributes(); echo $userAttributes['email']; }
Here we make registration, authorization or what you need on the site to enter.
Step 5. Display the button of login with Facebook
To display the button, use following code:
<?= yii\authclient\widgets\AuthChoice::widget([ 'baseAuthUrl' => ['site/auth'] ]) ?>
Now we can test everything and switch the application (here: https://developers.facebook.com/apps/) from test to public status.