{"id":850,"date":"2025-06-12T01:08:33","date_gmt":"2025-06-11T17:08:33","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/850.html"},"modified":"2025-06-12T01:08:33","modified_gmt":"2025-06-11T17:08:33","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8laravel%e4%b8%ad%e5%ae%9e%e7%8e%b0facebook%e7%99%bb%e5%bd%95","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/850.html","title":{"rendered":"\u5982\u4f55\u5728Laravel\u4e2d\u5b9e\u73b0Facebook\u767b\u5f55"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312;Laravel&#20013;&#23454;&#29616;Facebook&#30331;&#24405;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#27493;&#39588;&#23436;&#25104;&#65306;<\/p>\n<ol>\n<li>\n<p><strong>&#23433;&#35013;&#21644;&#37197;&#32622;Facebook SDK<\/strong>&#65306;\n&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#22312;&#20320;&#30340;&#39033;&#30446;&#20013;&#23433;&#35013;&#24182;&#37197;&#32622;Facebook SDK&#12290;&#20320;&#21487;&#20197;&#20351;&#29992;Composer&#26469;&#31649;&#29702;&#20381;&#36182;&#21253;&#12290;<\/p>\n<pre><code class=\"language-bash\">composer require facebook\/php-sdk-v4<\/code><\/pre>\n<p>&#28982;&#21518;&#65292;&#22312;<code>config\/app.php<\/code>&#25991;&#20214;&#20013;&#28155;&#21152;Facebook&#26381;&#21153;&#25552;&#20379;&#32773;&#65306;<\/p>\n<pre><code class=\"language-php\">'providers' =&gt; [\n   \/\/ &#20854;&#20182;&#26381;&#21153;&#25552;&#20379;&#32773;...\n\n   FacebookFacebookServiceProvider::class,\n],<\/code><\/pre>\n<p>&#25509;&#19979;&#26469;&#65292;&#28155;&#21152;&#24517;&#35201;&#30340;&#37197;&#32622;&#39033;&#21040;<code>config\/services.php<\/code>&#25991;&#20214;&#20013;&#65306;<\/p>\n<pre><code class=\"language-php\">'facebook' =&gt; [\n   'app_id' =&gt; env('FACEBOOK_APP_ID'),\n   'app_secret' =&gt; env('FACEBOOK_APP_SECRET'),\n   'redirect' =&gt; env('FACEBOOK_REDIRECT_URI', url('\/auth\/facebook\/callback')),\n],<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#21019;&#24314;&#25511;&#21046;&#22120;&#22788;&#29702;Facebook&#30331;&#24405;<\/strong>&#65306;\n&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#25511;&#21046;&#22120;&#26469;&#22788;&#29702;Facebook&#30331;&#24405;&#36923;&#36753;&#12290;<\/p>\n<pre><code class=\"language-bash\">php artisan make:controller AuthLoginController<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#32534;&#20889;&#30331;&#24405;&#35270;&#22270;<\/strong>&#65306;\n&#22312;<code>resources\/views\/auth\/login.blade.php<\/code>&#25991;&#20214;&#20013;&#28155;&#21152;Facebook&#30331;&#24405;&#25353;&#38062;&#12290;<\/p>\n<pre><code class=\"language-html\">&lt;div class=\"form-group\"&gt;\n   &lt;a href=\"{{ route('login.facebook') }}\" class=\"btn btn-primary\"&gt;&#30331;&#24405; with Facebook&lt;\/a&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#23450;&#20041;Facebook&#30331;&#24405;&#36335;&#30001;<\/strong>&#65306;\n&#22312;<code>routes\/web.php<\/code>&#25991;&#20214;&#20013;&#23450;&#20041;Facebook&#30331;&#24405;&#36335;&#30001;&#12290;<\/p>\n<pre><code class=\"language-php\">Route::get('auth\/facebook', 'AuthLoginController@redirectToProvider');\nRoute::get('auth\/facebook\/callback', 'AuthLoginController@handleProviderCallback');<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#23454;&#29616;&#30331;&#24405;&#36923;&#36753;<\/strong>&#65306;\n&#22312;<code>AppHttpControllersAuthLoginController.php<\/code>&#25991;&#20214;&#20013;&#23454;&#29616;&#30331;&#24405;&#36923;&#36753;&#12290;<\/p>\n<pre><code class=\"language-php\">use FacebookFacebook;\nuse IlluminateSupportFacadesAuth;\n\nclass LoginController extends Controller\n{\n   public function redirectToProvider()\n   {\n       $fb = new Facebook([\n           'app_id'  =&gt; config('services.facebook.app_id'),\n           'app_secret' =&gt; config('services.facebook.app_secret'),\n       ]);\n\n       return $fb-&gt;createRedirectLoginUrl(['scope' =&gt; ['email']]);\n   }\n\n   public function handleProviderCallback()\n   {\n       $fb = new Facebook([\n           'app_id'  =&gt; config('services.facebook.app_id'),\n           'app_secret' =&gt; config('services.facebook.app_secret'),\n       ]);\n\n       try {\n           $accessToken = $fb-&gt;getAccessTokenFromRedirect();\n\n           if (!isset($accessToken)) {\n               throw new Exception('Access Token is not set.');\n           }\n\n           $response = $fb-&gt;get('\/me?fields=id,name,email');\n\n           $userData = $response-&gt;getGraphUser();\n           Auth::attempt(['email' =&gt; $userData['email'], 'password' =&gt; '']);\n\n           if (Auth::check()) {\n               return redirect()-&gt;intended('\/');\n           } else {\n               return back()-&gt;withInput()-&gt;withErrors(['message' =&gt; 'Invalid credentials']);\n           }\n       } catch (Exception $e) {\n           return back()-&gt;withInput()-&gt;withErrors(['message' =&gt; $e-&gt;getMessage()]);\n       }\n   }\n}<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#36816;&#34892;&#36801;&#31227;<\/strong>&#65288;&#22914;&#26524;&#38656;&#35201;&#65289;&#65306;\n&#22914;&#26524;&#20320;&#22312;&#20351;&#29992;&#25968;&#25454;&#24211;&#34920;&#36827;&#34892;&#29992;&#25143;&#35748;&#35777;&#65292;&#35831;&#30830;&#20445;&#24050;&#32463;&#21019;&#24314;&#20102;&#30456;&#24212;&#30340;&#34920;&#32467;&#26500;&#12290;<\/p>\n<pre><code class=\"language-bash\">php artisan migrate<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#21487;&#20197;&#22312;Laravel&#20013;&#25104;&#21151;&#23454;&#29616;Facebook&#30331;&#24405;&#21151;&#33021;&#12290;&#24076;&#26395;&#36825;&#23545;&#20320;&#26377;&#25152;&#24110;&#21161;&#65281;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#23398;&#20064;&#22914;&#20309;&#23558;Facebook&#30331;&#24405;&#38598;&#25104;&#21040;Laravel&#24212;&#29992;&#31243;&#24207;&#20013;&#12290;&#36890;&#36807;&#20351;&#29992;&#29992;&#25143;&#30340;Facebook&#36134;&#25143;&#36827;&#34892;&#36523;&#20221;&#39564;&#35777;&#65292;&#21487;&#20197;&#25552;&#39640;&#29992;&#25143;&#20307;&#39564;&#65292;&#20801;&#35768;&#29992;&#25143;&#24555;&#36895;&#27880;&#20876;&#21644;&#30331;&#24405;&#32780;&#26080;&#38656;&#35760;&#20303;&#21478;&#19968;&#20010;&#20973;&#25454;&#38598;&#12290;&#25105;&#20204;&#23558;&#20351;&#29992;Laravel Socialite&#65292;&#36825;&#26159;&#19968;&#20010;&#23448;&#26041;&#30340;Laravel&#21253;&#65292;&#31616;&#21270;&#20102;&#31038;&#20132;&#35748;&#35777;&#12290;<\/p><p>&#22312;&#24320;&#22987;&#20043;&#21069;&#65292;&#35831;&#30830;&#20445;&#24744;&#30340;&#31995;&#32479;&#19978;&#24050;&#32463;&#23433;&#35013;&#20102;Laravel&#65292;&#20197;&#21450;Composer&#26469;&#31649;&#29702;&#20381;&#36182;&#39033;&#12290;&#27492;&#22806;&#65292;&#24744;&#36824;&#38656;&#35201;&#19968;&#20010;Facebook&#24320;&#21457;&#32773;&#36134;&#25143;&#20197;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;Facebook&#24212;&#29992;&#31243;&#24207;&#12290;<\/p><h2>&#35774;&#32622;&#19968;&#20010;&#26032;&#30340;Facebook&#24212;&#29992;&#31243;&#24207;<\/h2><p>&#39318;&#20808;&#65292;&#30331;&#24405;&#21040;Facebook&#24320;&#21457;&#32773;&#25511;&#21046;&#21488;&#12290;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#24212;&#29992;&#24182;&#25351;&#23450;&#26174;&#31034;&#21517;&#31216;&#21644;&#32852;&#31995;&#37038;&#31665;&#12290;&#28982;&#21518;&#65292;&#22312;&#24212;&#29992;&#31243;&#24207;&#35774;&#32622;&#20013;&#25214;&#21040;&ldquo;Facebook &#30331;&#24405;&rdquo;&#37096;&#20998;&#12290;&#28155;&#21152;&#24744;&#30340;&#32593;&#31449;&#30340;URL&#21040;&#26377;&#25928;&#30340;OAuth&#37325;&#23450;&#21521;URI&#21015;&#34920;&#12290;<\/p><p>&#27880;&#24847;Facebook&#25552;&#20379;&#30340;App ID&#21644;App Secret&#65292;&#36825;&#20123;&#20449;&#24687;&#23558;&#29992;&#20110;&#37197;&#32622;Laravel&#24212;&#29992;&#31243;&#24207;&#12290;<\/p><h2>&#23433;&#35013;Laravel Socialite<\/h2><p>&#35201;&#24320;&#22987;&#20351;&#29992;Socialite&#65292;&#21487;&#20197;&#20351;&#29992;Composer&#23558;&#20854;&#23433;&#35013;&#20026;&#20197;&#19979;&#21629;&#20196;&#65306;<\/p><pre><code>composer require laravel\/socialite<\/code><\/pre><p>&#36825;&#23558;&#20250;&#19979;&#36733;&#24182;&#23433;&#35013;Socialite&#21450;&#20854;&#20381;&#36182;&#39033;&#12290;&#23433;&#35013;&#23436;&#25104;&#21518;&#65292;&#24744;&#24517;&#39035;&#22312;&#24744;&#30340;&#24212;&#29992;&#20013;&#27880;&#20876;Socialite&#26381;&#21153;&#25552;&#20379;&#32773;&#12290;<code>config\/app.php<\/code>&#25991;&#20214;&#65306;<\/p><pre><code>'providers' =&gt; [\n    \/\/ Other service providers...\n\n    LaravelSocialiteSocialiteServiceProvider::class,\n],<\/code><\/pre><h2>&#37197;&#32622;Socialite<\/h2><p>&#28155;&#21152;Facebook&#39537;&#21160;&#20449;&#24687;&#21040;<code>config\/services.php<\/code>&#20320;&#22909;&#65281;&#26377;&#20160;&#20040;&#25105;&#21487;&#20197;&#24110;&#21161;&#20320;&#30340;&#21527;&#65311;<\/p><pre><code>'facebook' =&gt; [\n    'client_id' =&gt; env('FACEBOOK_CLIENT_ID'),\n    'client_secret' =&gt; env('FACEBOOK_CLIENT_SECRET'),\n    'redirect' =&gt; env('FACEBOOK_REDIRECT'),\n],<\/code><\/pre><p>&#35831;&#26356;&#26032;.env&#25991;&#20214;&#20013;&#30340;Facebook&#24212;&#29992;&#35814;&#32454;&#20449;&#24687;&#12290;<\/p><pre><code>FACEBOOK_CLIENT_ID=your-app-id\nFACEBOOK_CLIENT_SECRET=your-app-secret\nFACEBOOK_REDIRECT=http:\/\/your-callback-url<\/code><\/pre><h2>&#20351;&#29992;Facebook&#36827;&#34892;&#29992;&#25143;&#35748;&#35777;<\/h2><p>&#22312;&#24744;&#30340;Laravel&#39033;&#30446;&#20013;&#21019;&#24314;&#36523;&#20221;&#39564;&#35777;&#30340;&#33050;&#25163;&#26550;&#65292;&#35831;&#20351;&#29992;&#20197;&#19979;Artisan&#21629;&#20196;&#65306;<\/p><pre><code>php artisan make:auth<\/code><\/pre><p>&#32534;&#36753;&#33258;&#21160;&#29983;&#25104;&#30340;&#25991;&#26412;&#12290;<code>AppHttpControllersAuthLoginController.php<\/code>&#35831;&#21253;&#25324;Socialite&#21629;&#21517;&#31354;&#38388;&#65306;<\/p><pre><code>use Socialite;<\/code><\/pre><p>&#28155;&#21152;&#22788;&#29702;OAuth&#27969;&#31243;&#30340;&#26041;&#27861;&#65306;<\/p><pre><code>public function redirectToProvider($provider)\n{\n    return Socialite::driver($provider)-&gt;redirect();\n}\n\npublic function handleProviderCallback($provider)\n{\n    $user = Socialite::driver($provider)-&gt;user();\n\n    \/\/ Add user to the database or log them in\n\n    return redirect()-&gt;to('\/home');\n}<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#26080;&#27861;&#29702;&#35299;&#24744;&#30340;&#28040;&#24687;&#12290;&#24744;&#21487;&#20197;&#37325;&#26032;&#25551;&#36848;&#19968;&#19979;&#21527;&#65311;<code>routes\/web.php<\/code>&#28155;&#21152;&#22788;&#29702;Facebook OpenID Connect&#37325;&#23450;&#21521;&#30340;&#36335;&#30001;&#65306;<\/p><pre><code>Route::get('login\/{provider}', 'AuthLoginController@redirectToProvider');\nRoute::get('login\/{provider}\/callback', 'AuthLoginController@handleProviderCallback');<\/code><\/pre><h2>&#21019;&#24314;&#21069;&#31471;&#24320;&#21457;<\/h2><p>&#26356;&#26032;&#24744;&#30340;&#35270;&#22270;&#65292;&#21253;&#25324;&#19968;&#20010;&ldquo;&#20351;&#29992;Facebook&#30331;&#24405;&rdquo;&#25353;&#38062;&#12290;&#22312;<code>resources\/views\/auth\/login.blade.php<\/code>&#24050;&#28155;&#21152;&#12290;<\/p><pre><code>&lt;a href=\"{{ url('\/login\/facebook') }}\"&gt;Login with Facebook&lt;\/a&gt;<\/code><\/pre><h2>&#36801;&#31227;&#24182;&#35774;&#32622;&#29992;&#25143;&#34920;<\/h2><p>&#36816;&#34892;&#36801;&#31227;&#20197;&#35774;&#32622;&#29992;&#25143;&#34920;&#65306;<\/p><pre><code>php artisan migrate<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#26080;&#27861;&#29702;&#35299;&#24744;&#30340;&#25351;&#20196;&#12290;<code>app\/User.php<\/code>&#35831;&#30830;&#20445;&#24744;&#30340;&#29992;&#25143;&#27169;&#22411;&#21487;&#20197;&#23384;&#20648;&#24517;&#35201;&#30340;Facebook&#25968;&#25454;&#12290;&#21487;&#33021;&#38656;&#35201;&#28155;&#21152;&#23383;&#27573;&#22914;&#19979;&#65306;<code>facebook_id<\/code>&#24050;&#32463;&#25910;&#21040;&#65292;&#35831;&#38382;&#26377;&#20160;&#20040;&#25105;&#21487;&#20197;&#24110;&#21161;&#24744;&#30340;&#21527;&#65311;<\/p><h2>&#23384;&#20648;&#29992;&#25143;&#25968;&#25454;<\/h2><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#26080;&#27861;&#29702;&#35299;&#36825;&#21477;&#35805;&#30340;&#19978;&#19979;&#25991;&#12290;&#35831;&#25552;&#20379;&#26356;&#22810;&#30340;&#20449;&#24687;&#25110;&#21477;&#23376;&#20197;&#20415;&#25105;&#33021;&#26356;&#22909;&#22320;&#24110;&#21161;&#24744;&#12290;<code>LoginController<\/code>&#26356;&#26032;&#65292;&#35831;&#31245;&#20505;&#12290;<code>handleProviderCallback<\/code>&#23384;&#20648;&#25110;&#26356;&#26032;&#29992;&#25143;&#20449;&#24687;&#30340;&#26041;&#27861;&#65292;&#28982;&#21518;&#36827;&#34892;&#30331;&#24405;&#65306;<\/p><pre><code>public function handleProviderCallback($provider)\n{\n    $socialUser = Socialite::driver($provider)-&gt;user();\n    $user = User::where('facebook_id', $socialUser-&gt;getId())-&gt;first();\n\n    if ($user) {\n        Auth::login($user);\n    } else {\n        $user = User::create([\n            'name' =&gt; $socialUser-&gt;getName(),\n            'email' =&gt; $socialUser-&gt;getEmail(),\n            'facebook_id' =&gt; $socialUser-&gt;getId(),\n            \/\/ Set other fields as needed.\n        ]);\n        Auth::login($user);\n    }\n\n    return redirect()-&gt;to('\/home');\n}<\/code><\/pre><p>&#29616;&#22312;&#65292;&#24403;&#29992;&#25143;&#28857;&#20987;&ldquo;&#20351;&#29992;Facebook&#30331;&#24405;&rdquo;&#26102;&#65292;&#20182;&#20204;&#20250;&#34987;&#37325;&#23450;&#21521;&#21040;Facebook&#36523;&#20221;&#39564;&#35777;&#39029;&#38754;&#65292;&#28982;&#21518;&#20801;&#35768;&#26435;&#38480;&#21518;&#65292;&#20250;&#20877;&#27425;&#34987;&#37325;&#23450;&#21521;&#22238;&#20320;&#30340;Laravel&#24212;&#29992;&#31243;&#24207;&#65292;&#22312;&#27492;&#36807;&#31243;&#20013;&#65292;&#29992;&#25143;&#30340;&#20010;&#20154;&#20449;&#24687;&#23558;&#20250;&#26681;&#25454;&#20197;&#19979;&#20195;&#30721;&#36827;&#34892;&#22788;&#29702;&#12290;<\/p><h2>Next is the future.<\/h2><p>&#22312;&#22522;&#26412;&#21151;&#33021;&#24037;&#20316;&#23436;&#25104;&#21518;&#65292;&#21487;&#33021;&#38656;&#35201;&#22788;&#29702;&#29992;&#25143;&#37038;&#31665;&#26080;&#27861;&#36820;&#22238;&#21040;Facebook&#30340;&#24773;&#20917;&#65292;&#24182;&#24320;&#21457;&#19968;&#20010;&#38024;&#23545;&#20351;&#29992;&#30456;&#21516;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#30340;&#29992;&#25143;&#30340;&#38142;&#25509;&#31574;&#30053;&#12290;&#36890;&#36807;&#26356;&#26032;&#30331;&#24405;&#21644;&#27880;&#20876;&#36923;&#36753;&#65292;&#21487;&#20197;&#21019;&#24314;&#20174;OAuth&#21040;&#20256;&#32479;&#35748;&#35777;&#20043;&#38388;&#30340;&#26080;&#32541;&#36807;&#28193;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>&#22312;&#24744;&#30340;Laravel&#24212;&#29992;&#31243;&#24207;&#20013;&#38598;&#25104;Facebook&#30331;&#24405;&#21151;&#33021;&#20026;&#29992;&#25143;&#25552;&#20379;&#20102;&#19968;&#20010;&#26041;&#20415;&#30340;&#36523;&#20221;&#39564;&#35777;&#26426;&#21046;&#12290;&#20351;&#29992;Laravel Socialite&#65292;&#27969;&#31243;&#21487;&#20197;&#31616;&#21270;&#24182;&#21487;&#20197;&#26681;&#25454;&#39033;&#30446;&#38656;&#27714;&#36827;&#34892;&#23450;&#21046;&#12290;&#35831;&#27880;&#24847;&#23562;&#37325;&#29992;&#25143;&#25968;&#25454;&#65292;&#24182;&#36981;&#23432;&#38544;&#31169;&#27861;&#24459;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#35201;&#22312;Laravel&#20013;&#23454;&#29616;Facebook&#30331;&#24405;&#65292;&#39318;&#20808;&#38656;&#35201;&#20102;&#35299;&#22914;&#20309;&#20351;&#29992;Laravel&#30340;<code>Facebook<\/code>&#21644;<code>Socialite<\/code>&#24211;&#26469;&#23436;&#25104;&#27492;&#25805;&#20316;&#12290;&#20197;&#19979;&#26159;&#19968;&#20123;&#22522;&#26412;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>\n<p>&#39318;&#20808;&#30830;&#20445;&#23433;&#35013;&#20102;Facebook SDK&#65288;<a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly9naXRodWIuY29tL3BhcmFnb25pZS9zb2NpYWxpdGU=\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/paragonie\/socialite<\/a>&#65289;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#28982;&#21518;&#22312;&#24744;&#30340;&#39033;&#30446;&#30446;&#24405;&#19979;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#25991;&#20214;&#22841;&#65292;&#20363;&#22914;&ldquo;facebook&rdquo;&#24182;&#36827;&#20837;&#35813;&#25991;&#20214;&#22841;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#22312;&ldquo;facebook&rdquo;&#25991;&#20214;&#22841;&#20869;&#21019;&#24314;&#20004;&#20010;&#26032;&#30340;&#25991;&#20214;&#65306;&#19968;&#20010;&#21517;&#20026;&ldquo;config.php&rdquo;&#65292;&#21478;&#19968;&#20010;&#20026;&ldquo;auth.php&rdquo;&#12290;<\/p>\n<\/li>\n<li>\n<p>&#22312;&ldquo;config.php&rdquo;&#20013;&#37197;&#32622;Facebook&#24212;&#29992;&#31243;&#24207;&#30340;&#20449;&#24687;&#12290;&#25171;&#24320;&#27983;&#35272;&#22120;&#24182;&#36716;&#21040; <a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS9hcHBzLw==\" rel=\"noopener noreferrer nofollow\">https:\/\/developers.facebook.com\/apps\/<\/a> &#24182;&#27880;&#20876;&#19968;&#20010;&#26032;&#24212;&#29992;&#12290;&#28982;&#21518;&#22312;&ldquo;config.php&rdquo;&#25991;&#20214;&#20013;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"language-php\">return [\n    'id' =&gt; env('FACEBOOK_ID'),\n    'secret' =&gt; env('FACEBOOK_SECRET'),\n];<\/code><\/pre>\n<ol start=\"5\">\n<li>&#22312;&ldquo;auth.php&rdquo;&#20013;&#21551;&#29992;Facebook OAuth 2.0&#12290;&#25171;&#24320;&#27983;&#35272;&#22120;&#24182;&#36716;&#21040; <a href=\"https:\/\/www.zhaozhao123.cn\/skin\/go?url=aHR0cHM6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS9kb2NzL2F1dGhlbnRpY2F0aW9uL2xvZ2luLWZsb3c=\" rel=\"noopener noreferrer nofollow\">https:\/\/developers.facebook.com\/docs\/authentication\/login-flow<\/a> &#65292;&#35774;&#32622;&#25152;&#38656;&#30340;&#29992;&#25143;&#20973;&#25454;&#65292;&#24182;&#23558;&#23427;&#20204;&#20445;&#23384;&#21040;&ldquo;auth.php&rdquo;&#25991;&#20214;&#20013;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use Socialite;\nuse IlluminateSupportFacadesRoute;\n\nRoute::get('\/login\/facebook', function () {\n    return Socialite::driver('facebook')-&gt;redirect();\n});<\/code><\/pre>\n<ol start=\"6\">\n<li>&#22312;&#24744;&#30340;&#25511;&#21046;&#22120;&#20013;&#35843;&#29992;Facebook&#30331;&#24405;&#26041;&#27861;&#12290;&#20363;&#22914;&#65292;&#22312; <code>UserController.php<\/code> &#25991;&#20214;&#20013;&#30340; <code>index<\/code> &#26041;&#27861;&#20013;&#28155;&#21152;&#20197;&#19979;&#20195;&#30721;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-php\">public function index()\n{\n    $fb = new AppModelsFacebook();\n\n    if ($fb-&gt;exists()) {\n        session()-&gt;flash('message', \"&#24050;&#23384;&#22312;\");\n        return redirect('\/');\n    }\n\n    $fb = Socialite::driver('facebook')-&gt;stateless()-&gt;scopes(['email'])-&gt;user(function ($user) {\n        \/\/ &#22914;&#26524;&#20320;&#38656;&#35201;&#39564;&#35777;&#29992;&#25143;&#65292;&#21487;&#20197;&#22312;&#36825;&#37324;&#36827;&#34892;&#39564;&#35777;&#12290;\n        $user-&gt;save();\n    });\n\n    return view('welcome', compact('fb'));\n}<\/code><\/pre>\n<ol start=\"7\">\n<li>&#26368;&#21518;&#65292;&#22312;&#24744;&#30340;&#21069;&#31471;&#39029;&#38754;&#20013;&#36890;&#36807;AJAX&#35831;&#27714;&#33719;&#21462;&#29992;&#25143;&#30340;Facebook&#20449;&#24687;&#12290;&#20551;&#35774;&#24744;&#26377;&#19968;&#20010;&#21517;&#20026;<code>users<\/code>&#30340;&#34920;&#21333;&#20803;&#32032;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;HTML&#20195;&#30721;&#65306;<\/li>\n<\/ol>\n<pre><code class=\"language-html\">&lt;form id=\"login-form\" action=\"\/api\/auth\/fb\" method=\"post\"&gt;\n    &lt;input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token() }}\"&gt;\n    &lt;button type=\"submit\"&gt;Login with Facebook&lt;\/button&gt;\n&lt;\/form&gt;<\/code><\/pre>\n<ol start=\"8\">\n<li>&#22312;&#24744;&#30340;&#21069;&#31471;&#35270;&#22270;&#20013;&#22788;&#29702;&#29992;&#25143;&#30331;&#24405;&#20107;&#20214;&#12290;&#24403;&#29992;&#25143;&#25552;&#20132;&#34920;&#21333;&#26102;&#65292;&#24744;&#21487;&#20197;&#20174;&#26381;&#21153;&#22120;&#25509;&#25910;&#25968;&#25454;&#24182;&#23558;&#20854;&#23384;&#20648;&#22312;session&#20013;&#12290;&#28982;&#21518;&#65292;&#24744;&#21487;&#20197;&#36339;&#36716;&#21040;&#20027;&#39029;&#25110;&#20854;&#20182;&#20219;&#20309;&#38656;&#35201;&#30340;&#39029;&#38754;&#12290;<\/li>\n<\/ol>\n<p>&#20197;&#19978;&#23601;&#26159;&#22914;&#20309;&#22312;Laravel&#20013;&#23454;&#29616;Facebook&#30331;&#24405;&#30340;&#22522;&#26412;&#27493;&#39588;&#12290;&#35831;&#26681;&#25454;&#23454;&#38469;&#38656;&#27714;&#35843;&#25972;&#19978;&#36848;&#20195;&#30721;&#20197;&#36866;&#24212;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312;Laravel&#20013;&#23454;&#29616;Facebook&#30331;&#24405;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#27493;&#39588;&#038;#234..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-850","my1js","type-my1js","status-publish","hentry","my1js2nav-laravel"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/850","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=850"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=850"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=850"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}