{"id":23297,"date":"2021-04-27T13:48:00","date_gmt":"2021-04-27T10:48:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=23297"},"modified":"2021-10-18T02:25:28","modified_gmt":"2021-10-17T23:25:28","slug":"systeme-de-connexion-sociale-utilisant-laravel-socialite","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/fr\/systeme-de-connexion-sociale-utilisant-laravel-socialite\/","title":{"rendered":"Syst\u00e8me de connexion sociale utilisant Laravel Socialite"},"content":{"rendered":"<p>Cr\u00e9dit: Cet article est inspir\u00e9 de ce post <a href=\"https:\/\/scotch.io\/tutorials\/laravel-social-authentication-with-socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Social Authentication with Socialite<\/a><\/p>\n<p>Cherchez-vous \u00e0 mettre en \u0153uvre un syst\u00e8me de connexion sociale sur votre site Web Laravel\u00a0? En autorisant la connexion sociale, vos utilisateurs n&rsquo;ont pas besoin de s&rsquo;inscrire sur votre site Web. Cela nous permet \u00e9galement d&rsquo;\u00e9conomiser beaucoup de travail, comme l&rsquo;envoi du lien d&rsquo;activation, la v\u00e9rification du compte de messagerie. Dans cet article, nous \u00e9tudions comment ajouter un syst\u00e8me de connexion sociale \u00e0 l&rsquo;aide de Laravel socialite.<\/p>\n<p><a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">La<\/a> biblioth\u00e8que <a href=\"https:\/\/github.com\/laravel\/socialite\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Laravel Socialite<\/a> fournit une authentification OAuth avec Facebook, Twitter, Google, LinkedIn, GitHub et Bitbucket. Ce que nous devons faire, c&rsquo;est installer cette biblioth\u00e8que sur notre site Web Laravel, la configurer, obtenir les cl\u00e9s API d&rsquo;un site social et nous sommes pr\u00eats \u00e0 partir.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20876-60823669e70f3.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20876-60823669e70f3.png\" alt=\"Syst\u00e8me de connexion sociale utilisant Laravel Socialite\" ><\/a><\/p>\n<h3>Cr\u00e9er un tableau des utilisateurs<\/h3>\n<p>Pour mettre en \u0153uvre le syst\u00e8me de connexion sociale, nous devons cr\u00e9er une table des utilisateurs qui stockera les d\u00e9tails fournis par le site social.<\/p>\n<p>Si vous avez une nouvelle installation d&rsquo;un Laravel, ouvrez l&rsquo;outil de ligne de commande dans le r\u00e9pertoire racine d&rsquo;un projet et ex\u00e9cutez la commande <code>php artisan make:auth<\/code>. Cette commande cr\u00e9era des contr\u00f4leurs d&rsquo;authentification tels que LoginController, RegisterController, etc. qui se trouvent dans le r\u00e9pertoire app\/Http\/Controllers\/Auth. Il cr\u00e9e \u00e9galement une vue login.blade.php, register.blade.php dans le r\u00e9pertoire resources\/view\/auth.<\/p>\n<p>Ensuite, ouvrez la table de migration pour les utilisateurs. Nous allons modifier cette migration par d\u00e9faut et ajouter deux colonnes suppl\u00e9mentaires appel\u00e9es provider et provider_id.<\/p>\n<pre><code>public function up()\n{\n\u00a0\u00a0\u00a0\u00a0Schema::create('users', function (Blueprint $table) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;increments('id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('name');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('email')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('password')-&gt;nullable();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;string('provider_id');\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;rememberToken();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$table-&gt;timestamps();\n\u00a0\u00a0\u00a0\u00a0});\n}<\/code><\/pre>\n<p>Comme vous le voyez, nous d\u00e9finissons les colonnes d&rsquo;e-mail et de mot de passe sur nullable. Pourquoi? Lorsque nous utilisons l&rsquo;authentification de connexion sociale, il n&rsquo;y a aucune garantie d&rsquo;obtenir un identifiant de messagerie d&rsquo;un utilisateur. Et le mot de passe n&rsquo;est pas non plus n\u00e9cessaire dans ce cas. Nous gardons donc l&rsquo;adresse e-mail et le mot de passe \u00e0 nullable. Le fournisseur de colonne stockera le nom du site social comme Facebook, Twitter, etc. Column provider_id stockera l&rsquo;identifiant social d&rsquo;un utilisateur respectif du site social.<\/p>\n<p>Une fois que vous avez modifi\u00e9 votre migration d&rsquo;utilisateur comme ci-dessus, ex\u00e9cutez la commande <code>php artisan migrate<\/code>. Cela cr\u00e9era une table appel\u00e9e \u00ab\u00a0utilisateurs\u00a0\u00bb dans votre base de donn\u00e9es.<\/p>\n<p>Probablement, lors de l&rsquo;ex\u00e9cution de la commande de migration, vous obtiendrez une erreur \u00e9trange li\u00e9e \u00e0 la longueur des caract\u00e8res. Si tel est le cas, ouvrez le fichier AppServiceProvider.php \u00e0 partir du r\u00e9pertoire app\/Providers. Dans ce fichier, nous devons d\u00e9finir la longueur de cha\u00eene par d\u00e9faut pour les colonnes d&rsquo;une table de base de donn\u00e9es.<\/p>\n<p>Fichier AppServiceProvider.php<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppProviders;\n\u00a0\nuse IlluminateSupportServiceProvider;\nuse IlluminateSupportFacadesSchema;\n\u00a0\nclass AppServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Bootstrap any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function boot()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Schema::defaultStringLength(255);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Register any application services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function register()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<h3>Mod\u00e8le d&rsquo;utilisateur<\/h3>\n<p>Par d\u00e9faut, Laravel inclut un mod\u00e8le AppUser Eloquent dans votre r\u00e9pertoire d&rsquo;applications. Ouvrez User.php \u00e0 partir du dossier de l&rsquo;application. Ajoutez deux autres colonnes provider, provider_id \u00e0 la variable $fillable.<\/p>\n<pre><code>protected $fillable = [\n\u00a0\u00a0\u00a0\u00a0'name', 'email', 'password', 'provider', 'provider_id',\n];<\/code><\/pre>\n<h3>Installer et configurer Laravel Socialite<\/h3>\n<p>Pour installer cette biblioth\u00e8que, vous devez avoir install\u00e9 <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">composer<\/a> sur votre syst\u00e8me.<\/p>\n<p>Dans votre outil de ligne de commande, ex\u00e9cutez la commande ci-dessous.<\/p>\n<p><code>composer require laravel\/socialite<\/code><\/p>\n<p>Apr\u00e8s avoir install\u00e9 la biblioth\u00e8que, enregistrez LaravelSocialiteSocialiteServiceProvider dans votre fichier de configuration config\/app.php.<\/p>\n<pre><code>'providers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\/\/ Other service providers...\n\u00a0\n\u00a0\u00a0\u00a0\u00a0LaravelSocialiteSocialiteServiceProvider::class,\n],<\/code><\/pre>\n<p>Dans le m\u00eame fichier config\/app.php, sous le tableau aliases, ajoutez Fa\u00e7ade Socialite.<\/p>\n<pre><code>'Socialite' =&gt; LaravelSocialiteFacadesSocialite::class,<\/code><\/pre>\n<p>Maintenant, il est temps d&rsquo;enregistrer votre candidature sur le site social. Par exemple, nous supposons que vous souhaitez impl\u00e9menter l&rsquo;authentification de connexion Facebook. Alors n&rsquo;h\u00e9sitez plus et <a href=\"https:\/\/developers.facebook.com\/docs\/apps\/register\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">cr\u00e9ez une application sur Facebook<\/a>.<\/p>\n<p>Une fois que vous \u00eates pr\u00eat avec l&rsquo;identifiant de l&rsquo;application, le secret de l&rsquo;application de votre application Facebook, ouvrez le fichier config\/services.php et ajoutez-y le code ci-dessous.<\/p>\n<pre><code>'facebook' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; env('FB_APP_ID'),\n\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; env('FB_APP_SECRET'),\n\u00a0\u00a0\u00a0\u00a0'redirect' =&gt; env('FB_CALLBACK_URL'),\n],<\/code><\/pre>\n<p>Comme indiqu\u00e9 dans le code ci-dessus, nous devons stocker les d\u00e9tails de notre application et l&rsquo;URL de rappel dans le fichier .env.<\/p>\n<pre><code>FB_APP_ID=PASTE_APP_ID_HERE\nFB_APP_SECRET=PASTE_APP_SECRET_HERE\nFB_CALLBACK_URL=YOU_SITE_URL\/login\/facebook\/callback<\/code><\/pre>\n<p>Nous avons transmis l&rsquo;URL de rappel en tant que YOU_SITE_URL\/login\/facebook\/callback. Maintenant, il est temps de cr\u00e9er deux routes, une pour rediriger l&rsquo;utilisateur vers le fournisseur OAuth (dans notre cas, Facebook) et une autre pour recevoir le rappel du fournisseur apr\u00e8s authentification.<\/p>\n<h3>Code r\u00e9el pour la gestion d&rsquo;OAuth<\/h3>\n<p>\u00c0 ce stade, nous avons termin\u00e9 toutes les configurations de Laravel Socialite. Il est temps d&rsquo;\u00e9crire du code qui g\u00e8re la redirection OAuth et r\u00e9cup\u00e8re les d\u00e9tails de l&rsquo;utilisateur.<\/p>\n<p>Ouvrez votre fichier login.blade.php et placez-y le code ci-dessous probablement apr\u00e8s le bouton d&rsquo;envoi.<\/p>\n<pre><code>&lt;div class=\"form-group\"&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-md-6 col-md-offset-4\"&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Login with\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/facebook') }}\"&gt;&lt;i class=\"fa fa-facebook-official\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Facebook&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/twitter') }}\"&gt;&lt;i class=\"fa fa-twitter\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Twitter&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;a href=\"{{ url('\/login\/github') }}\"&gt;&lt;i class=\"fa fa-github\" aria-hidden=\"true\"&gt;&lt;\/i&gt; Github&lt;\/a&gt;\n\u00a0\u00a0\u00a0\u00a0&lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Ici, nous ajoutons un lien pour Github et Twitter. Les \u00e9tapes d&rsquo;ajout d&rsquo;OAuth pour ces sites sociaux sont \u00e9galement identiques \u00e0 celles de Facebook. Il vous suffit de cr\u00e9er une application des sites sociaux respectifs et de stocker ces informations de la m\u00eame mani\u00e8re que nous avons ajout\u00e9es pour Facebook.<\/p>\n<p>Dans votre fichier de route, d\u00e9finissez les routes comme ci-dessous.<\/p>\n<pre><code>Route::get('login\/{provider}', 'AuthLoginController@redirectToProvider');\nRoute::get('login\/{provider}\/callback', 'AuthLoginController@handleProviderCallback');<\/code><\/pre>\n<p>Ensuite, acc\u00e9dez \u00e0 app\/Http\/Controllers\/Auth\/LoginController.php et modifiez le fichier. Vous devez y ajouter le code ci-dessous.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllersAuth;\n\u00a0\nuse AppHttpControllersController;\nuse IlluminateFoundationAuthAuthenticatesUsers;\nuse Socialite;\nuse AppUser;\nuse Auth;\n\u00a0\nclass LoginController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Redirect the user to the GitHub authentication page.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function redirectToProvider($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return Socialite::driver($provider)-&gt;scopes(['email'])-&gt;redirect();\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Obtain the user information from GitHub.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return Response\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function handleProviderCallback($provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Socialite::driver($provider)-&gt;user();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = $this-&gt;findOrCreateUser($user, $provider);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Auth::login($authUser, true);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return redirect($this-&gt;redirectTo);\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* If a user has registered before using social auth, return the user\n\u00a0\u00a0\u00a0\u00a0\u00a0* else, create a new user object.\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param\u00a0 $user Socialite user object\n\u00a0\u00a0\u00a0\u00a0\u00a0* @param $provider Social auth provider\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return\u00a0 User\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function findOrCreateUser($user, $provider)\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$authUser = User::where('provider_id', $user-&gt;id)-&gt;first();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if ($authUser) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return $authUser;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return User::create([\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'name'\u00a0\u00a0\u00a0\u00a0 =&gt; $user-&gt;name,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email'\u00a0\u00a0\u00a0 =&gt; $user-&gt;email,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; $provider,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider_id' =&gt; $user-&gt;id\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>La m\u00e9thode redirectToProvider redirige l&rsquo;utilisateur vers la page de connexion d&rsquo;un site social. Une fois que l&rsquo;utilisateur autorise l&rsquo;application, nous r\u00e9cup\u00e9rons les informations de l&rsquo;utilisateur dans la fonction handleProviderCallback. Si l&rsquo;utilisateur n&rsquo;existe pas avec notre syst\u00e8me, nous ajoutons ses coordonn\u00e9es \u00e0 l&rsquo;aide de la m\u00e9thode findOrCreateUser.<\/p>\n<p>Nous esp\u00e9rons que vous avez pris connaissance du syst\u00e8me de connexion sociale utilisant Laravel Socialite. Si vous avez des questions ou des suggestions, veuillez laisser un commentaire ci-dessous.<\/p>\n<h4>Articles Li\u00e9s<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/comment-utiliser-la-fonctionnalite-de-connexions-a-plusieurs-bases-de-donnees-de-laravel-sur-un-site-web\/\" title=\"Comment utiliser la fonctionnalit\u00e9 de connexions \u00e0 plusieurs bases de donn\u00e9es de Laravel sur un site Web\">Comment utiliser la fonctionnalit\u00e9 de connexions \u00e0 plusieurs bases de donn\u00e9es de Laravel sur un site Web<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/fr\/creer-un-site-web-multilingue-en-php-a-l-aide-du-framework-laravel\/\" title=\"Cr\u00e9er un site Web multilingue en PHP \u00e0 l&#039;aide du framework Laravel\">Cr\u00e9er un site Web multilingue en PHP \u00e0 l&rsquo;aide du framework Laravel<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si vous cherchez \u00e0 ajouter un syst\u00e8me de connexion sociale sur votre site Web Laravel, alors Laravel Socialite est une biblioth\u00e8que qui nous aide \u00e0 configurer ce syst\u00e8me.<\/p>\n","protected":false},"author":1,"featured_media":21626,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[176,497],"tags":[844],"class_list":["post-23297","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chrome-4","category-laravel2-4","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/23297","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/comments?post=23297"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/posts\/23297\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media\/21626"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/media?parent=23297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/categories?post=23297"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/fr\/wp-json\/wp\/v2\/tags?post=23297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}