Laravel Socialite 簡易的FB登入教學

 一開始是使用FB的sdk登入, 在測試的時候都很正常

但是上線後發現了一個致命的BUG,就是手機APP使用LINE或FB messager開啟網站的話,無法登入 😱

上網查資料發現沒有解決方法只能改變方式登入,所以馬上導入Laravel/Socialite 


一、先使用composer 下載 Laravel/Socialite  

composer require laravel/socialite

二、laravel進行設定

config/app.php

<?php
return [
    //自動載入Service Providers
    'providers' => [
        //Facebook登入
        Laravel\Socialite\SocialiteServiceProvider::class,
    ],
    //類別命名
    'aliases' => [
        //Facebook登入
        'Socialite' => Laravel\Socialite\Facades\Socialite::class,
    ],
];

config/services.php

<?php
return [
    'facebook' => [
        'client_id' => env('FB_CLIENT_ID'),
        'client_secret' => env('FB_CLIENT_SECRET'),
        'redirect' => env('FB_REDIRECT'),
    ],
];

三、程式碼

routes/web.php

//第三方登入
Route::get('/facebook/link','MemberController@facebookLink');
Route::get('/facebook/callback','MemberController@facebookCallback');

controllers

//在最上方記得引入
use Socialite;
public function facebookLink(Request $request)
{
    //紀錄一開始頁面的url,因為登入成功後要跳轉回來
    Session::flash('url',$request->server('HTTP_REFERER')); 
    return Socialite::driver('facebook')->redirect();
}
//fb登入
public function facebookCallback()
{
    try {
        //錯誤的話,跳轉到首頁
        if(request()->error=="access_denied")
        {
            return redirect('/');
        }

        //印出所有資料
        $user = Socialite::driver('facebook')->user();

        //個別印出資料
        $open_id = $user->getId();
        $fb_email = $user->getEmail();
        $fb_name = $user->getName();

        //擁有以上的資料後,就可以開始寫登入邏輯拉~
        //......
        //......
        //......
        //......

        //用member_id直接登入
        Auth::loginUsingId($member_id);
        //跳轉回一開始的頁面
        return redirect(Session::get('url'));

    } catch (Exception $e) {
        return redirect('/');
    }
}

view

<a href="/facebook/link"> fb登入 </a>





留言

這個網誌中的熱門文章

網頁入門教材目錄

PHP入門教學 - 基本用法 1

laravel 入門 1 (基礎概念)