紀錄如何使用 Laravel Socialite 整合 LINE 登入功能。步驟包括安裝 Laravel Socialite、安裝 Socialite Providers 套件、設定 LINE 整合資料、修改資料庫結構以及建立處理 LINE 登入和回呼的控制器。
安裝 Laravel Socialite
首先,使用 Composer 安裝 Laravel Socialite 套件:
composer require laravel/socialite
安裝的版本可能會根據你的 Laravel 版本而有所不同。以下是一個範例的 composer.json
檔案,包含了 Laravel Socialite 和其他相依套件的版本資訊:
"require": { "php": "^8.2", "ext-pdo_mysql": "*", "facebook/php-business-sdk": "^13.0", "firebase/php-jwt": "^6.9", "guzzlehttp/guzzle": "^7.2", "laravel/framework": "^10.10", "laravel/sanctum": "^3.2", "laravel/socialite": "^5.5", "laravel/tinker": "^2.8", "livewire/livewire": "^3.3", "nesbot/carbon": "^2.66", "revolution/laravel-google-sheets": "^6.0", "socialiteproviders/line": "^4.1" },
接著,打開 config/app.php
檔案,並在 providers
部分加入以下程式碼:
Laravel\Socialite\SocialiteServiceProvider::class,
然後,在 aliases
部分加入以下程式碼:
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
安裝 Socialite Providers 套件
由於 Laravel Socialite 沒有提供 LINE driver,需要使用 Socialite Providers 套件來整合 LINE 登入功能。首先,根據要整合的社群帳號選擇安裝相應的套件。以 LINE 為例,執行以下指令:
composer require socialiteproviders/line
接著,打開 config/app.php
檔案,將 Laravel\Socialite\SocialiteServiceProvider::class
從 providers
陣列中移除或註解掉,並加入 SocialiteProviders\Manager\ServiceProvider::class
:
// 'providers' 部分 // Laravel\Socialite\SocialiteServiceProvider::class, // Socialite Providers SocialiteProviders\Manager\ServiceProvider::class,
然後,打開 app/Providers/EventServiceProvider.php
檔案,在 listen
陣列中加入以下程式碼:
// 'listen' 部分 \SocialiteProviders\Manager\SocialiteWasCalled::class => [ // LINE 帳號登入 'SocialiteProviders\\Line\\LineExtendSocialite@handle', ],
這樣就完成了 Socialite Providers 套件的安裝和配置。
設定 LINE 整合資料
在進行 LINE 登入整合之前,我們需要在 .env
檔案中加入 LINE 相關的設定資料。請在 .env
檔案中加入以下程式碼:
LINE_CLIENT_ID=YOUR_LINE_CLIENT_ID LINE_CLIENT_SECRET=YOUR_LINE_CLIENT_SECRET LINE_REDIRECT_URI=https://your-domain.com/auth/line/callback
請將 YOUR_LINE_CLIENT_ID
和 YOUR_LINE_CLIENT_SECRET
替換為你的 LINE 應用程式的 Client ID 和 Client Secret。同時,將 https://your-domain.com/auth/line/callback
替換為你應用程式的回呼 URL。
註:LINE 應用程式的 Client ID 和 Client Secret 可以在 LINE Developers 中註冊並取得。
接著,打開 config/services.php
檔案,並在 providers
部分加入以下程式碼:
'line' => [ 'client_id' => env('LINE_CLIENT_ID'), 'client_secret' => env('LINE_CLIENT_SECRET'), 'redirect' => env('LINE_REDIRECT_URI') ],
這樣就完成了 LINE 整合資料的設定。
更新配置快取
在設定完成後,執行以下指令更新配置快取:
php artisan config:cache
修改資料庫結構
為了儲存 LINE 登入相關的資料,我們需要修改資料庫結構。首先,建立一個 migration 檔案,並在使用者資料表中加入 LINE 帳號的定義欄位。請執行以下指令:
php artisan make:migration add_line_id_to_users_table --table=users
這將建立一個名為 add_line_id_to_users_table
的 migration 檔案。請打開這個檔案,並將下面的程式碼加入到 up
方法中:
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class AddLineIdToUserTable extends Migration { public function up() { Schema::table('users', function (Blueprint $table) { //加入 LINE ID 欄位到 google_account欄位之後 $table->string('line_id', 64)->nullable()->after('google_account'); //建立索引 $table->index(['line_id'], 'user_l_idx'); }); } public function down() { Schema::table('users', function (Blueprint $table) { //移除欄位 $table->dropColumn('line_id'); }); } }
這個 migration 檔案會在 users
資料表中加入 line_id
欄位,並且建立一個索引。
接著,執行 migration 指令來更新資料庫結構:
php artisan migrate
這樣就完成了資料庫結構的修改。
建立控制器
最後,我們需要建立一個控制器來處理 LINE 登入相關的操作。如果還沒有建立控制器,請先使用以下指令建立一個控制器:
php artisan make:controller LineAuthController
接著,在 LineAuthController
控制器中,建立兩個方法:lineLogin
和 lineLoginCallback
。請在 lineLogin
方法中將使用者重新導向至 LINE 帳戶登入頁面,並在 lineLoginCallback
方法中處理 LINE 回傳的資料。以下是一個簡單的範例:
use Socialite; class LineAuthController extends Controller { public function lineLogin() { return Socialite::driver('line')->redirect(); } public function lineLoginCallback() { $user = Socialite::driver('line')->user(); dd($user); } }
如果要直接取得 LINE 登入的 URL,可以使用以下程式碼:
public function getLineLoginUrl() { return Socialite::driver('line')->stateless()->redirect()->getTargetUrl(); }
上面的程式碼只是一個簡單的範例,需要根據自己的需求進行修改。
這樣就完成了 LINE 登入功能的整合。你可以根據自己的需求進一步擴充這個功能,例如將 LINE 帳號與使用者資料進行綁定,或是儲存 LINE 登入相關的資料到資料庫中。
參考資料: