


Laravel Socialite ialah pakej Laravel pihak pertama yang membantu pembangun melaksanakan pengesahan sosial OAuth & OAuth2 dalam aplikasi mereka. Ia mempunyai sokongan terbina dalam untuk Facebook, Twitter, Google, LinkedIn, GitHub, GitLab dan Bitbucket. Socialite boleh menyokong penyedia lain melalui pakej komuniti.
Siaran ini akan:
- Terangkan apa yang Socialite lakukan dan tidak lakukan.
- Tunjukkan cara untuk menyepadukan pengesahan Google ke dalam projek Laravel baharu melalui Socialite.
- Tunjukkan contoh ujian Socialite.
TLDR: anda boleh melihat projek yang telah siap di GitHub saya. Sila lihat jika anda lebih suka membaca kod yang telah lengkap.
Apakah yang Laravel Socialite lakukan dan tidak lakukan?
Socialite ialah pakej kecil, dengan API utamanya terdiri daripada dua kaedah utama:
- Socialite::driver($authProvider)->redirect() akan mengubah hala pengguna ke penyedia pengesahan yang ditentukan, menghantar sebarang maklumat yang diperlukan kepada pembekal melalui parameter URL.
- Socialite::driver($authProvider)->user() mendapatkan semula data pengguna yang dihantar semula daripada pembekal pengesahan dan menjadikannya tersedia ke titik akhir.
Terdapat kaedah sokongan tambahan untuk skop tetapan dan parameter pilihan. Anda boleh membaca tentang mereka dalam dokumentasi Sosialit.
Socialite tidak melakukan perkara berikut: ia menyerahkan pelaksanaan ciri ini kepada pembangun:
- ❌ Cipta jadual atau lajur pangkalan data yang diperlukan untuk menyimpan data pengesahan sosial.
- ❌ Cipta pengguna yang tidak wujud semasa proses pengesahan.
- ❌ Sahkan pengguna selepas aliran OAuth berjaya.
- ❌ Muat semula token OAuth.
Prasyarat: mencipta projek Google Cloud
Kami akan menyediakan projek Socialite kecil yang membolehkan pengguna membuat pengesahan melalui Google. Untuk berbuat demikian, anda mesti membuat apl Google.
Mula-mula buat projek Google Cloud baharu, kemudian konfigurasikan skrin persetujuan OAuth untuk projek itu. Tetapkan jenis pengguna kepada luaran, kemudian dayakan skop berikut:
- .../auth/userinfo.email
- .../auth/userinfo.profile
Selepas mengkonfigurasi skrin persetujuan, buat ID Klien OAuth 2.0 dengan melawati Halaman Bukti Kelayakan Awan Google. Pegang pada ID pelanggan dan rahsia pelanggan: kami akan menggunakannya kemudian dalam projek.
Menyediakan projek Laravel yang minimum dengan Socialite
Buat projek Laravel baharu:
laravel new socialite-tests
Pilih pilihan berikut daripada pemasang:
┌ Would you like to install a starter kit? ────────────────────┐ │ No starter kit │ └──────────────────────────────────────────────────────────────┘ ┌ Which testing framework do you prefer? ──────────────────────┐ │ Pest │ └──────────────────────────────────────────────────────────────┘ ┌ Which database will your application use? ───────────────────┐ │ SQLite │ └──────────────────────────────────────────────────────────────┘ ┌ Would you like to run the default database migrations? ──────┐ │ Yes │ └──────────────────────────────────────────────────────────────┘
Tukar ke dalam direktori projek dan pasang Socialite.
laravel new socialite-tests
Buat penghijrahan baharu.
┌ Would you like to install a starter kit? ────────────────────┐ │ No starter kit │ └──────────────────────────────────────────────────────────────┘ ┌ Which testing framework do you prefer? ──────────────────────┐ │ Pest │ └──────────────────────────────────────────────────────────────┘ ┌ Which database will your application use? ───────────────────┐ │ SQLite │ └──────────────────────────────────────────────────────────────┘ ┌ Would you like to run the default database migrations? ──────┐ │ Yes │ └──────────────────────────────────────────────────────────────┘
Letakkan kod berikut dalam fail migrasi yang baru dibuat dalam pangkalan data/migrasi:
cd socialite-tests composer require laravel/socialite
Penghijrahan ini menambah medan yang akan disediakan oleh Socialite apabila pengguna berjaya mengesahkan. Dalam pelaksanaan kami, kami menambah medan ini terus ke jadual pengguna untuk kesederhanaan. Jika anda ingin menyokong lebih banyak penyedia berbanding Google, anda mungkin mahu membuat jadual berasingan yang boleh menyimpan berbilang penyedia bagi setiap pengguna.
Kami menetapkan kata laluan menjadi batal kerana pengguna tidak akan menetapkan kata laluan jika mereka hanya mengesahkan melalui Google. Jika apl anda membenarkan pengesahan sosial dan pengesahan kata laluan, anda mesti mengesahkan bahawa kata laluan itu tidak kosong atau batal apabila pengguna cuba log masuk melalui kata laluan.
Jalankan penghijrahan.
php artisan make:migration add_socialite_fields_to_users
Dalam config/services.php, tambahkan blok kod berikut pada penghujung tatasusunan perkhidmatan. Anda boleh menemui senarai penuh nama perkhidmatan Socialite yang sah dalam dokumen konfigurasi.
<?php // database/migrations/2024_12_31_075619_add_socialite_fields_to_users.php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. */ public function up(): void { Schema::table('users', function (Blueprint $table) { $table->string('google_id')->default(''); $table->string('google_token')->default(''); $table->string('google_refresh_token')->default(''); // If your app allows both password and social logins, you // MUST validate that the password is not blank during login. // If you do not, an attacker could gain access to an account // that uses social login by only knowing the email. $table->string('password')->nullable()->change(); }); } /** * Reverse the migrations. */ public function down(): void { Schema::table('users', function (Blueprint $table) { $table->dropColumn('google_id'); $table->dropColumn('google_token'); $table->dropColumn('google_refresh_token'); $table->string('password')->nullable(false)->change(); }); } };
Tambah yang berikut pada .env, menggunakan bukti kelayakan daripada apl Google anda yang anda buat dalam bahagian "prasyarat".
php artisan migrate
Ganti kandungan route/web.php dengan kod berikut.
// config/services.php 'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => '/auth/google/callback', ],
Kod baharu dalam fail ini melaksanakan laluan untuk:
- Mengubah hala ke Google untuk log masuk sosial dengan maklumat yang sesuai.
- Mengendalikan panggilan balik daripada Google. Laluan ini mencipta atau mengemas kini pengguna semasa log masuk, kemudian mengesahkan mereka dan mengubah hala mereka ke halaman utama.
- Melog keluar pengguna yang disahkan.
Akhir sekali, gantikan kandungan sumber/pandangan/welcome.php dengan penanda berikut.
# .env GOOGLE_CLIENT_ID="your-google-client-id" GOOGLE_CLIENT_SECRET="your-google-client-secret"
Dengan ini selesai, kami boleh menguji apl secara manual dengan menjalankan pelayan pembangunan.
<?php // routes/web.php use App\Models\User; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Route; use Laravel\Socialite\Facades\Socialite; use Laravel\Socialite\Two\InvalidStateException; use Laravel\Socialite\Two\User as OAuth2User; Route::get('/', function () { return view('welcome'); }); Route::get('/auth/google/redirect', function () { return Socialite::driver('google')->redirect(); }); Route::get('/auth/google/callback', function () { try { /** @var OAuth2User $google_user */ $google_user = Socialite::driver('google')->user(); } catch (InvalidStateException $exception) { abort(400, $exception->getMessage()); } $user = User::updateOrCreate([ 'email' => $google_user->email, ], [ 'google_id' => $google_user->id, 'name' => $google_user->name, 'google_token' => $google_user->token, 'google_refresh_token' => $google_user->refreshToken, ]); Auth::login($user); return redirect('/'); }); Route::get('/auth/logout', function () { Auth::logout(); return redirect('/'); });
Apabila anda mengklik pautan Log masuk dengan Google, anda harus melalui aliran OAuth2 dan diubah hala ke halaman utama di mana anda boleh melihat maklumat tentang pengguna yang baru dibuat daripada Google.
Menguji Sosialit dengan Perosak
Ujian manual kami berfungsi, tetapi kami ingin ujian automatik untuk mengesahkan bahawa kami tidak melanggar fungsi ini secara tidak sengaja pada masa hadapan.
Kami boleh mencipta fail ujian baharu dengan arahan berikut.
<!-- resources/views/welcome.php --> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Laravel Socialite Testing Example</title> <h1 id="Laravel-Socialite-Testing-Example">Laravel Socialite Testing Example</h1> @if (auth()->check()) <p>User is authenticated.</p> <p>Name: {{ auth()->user()->name }}</p> <p>Email: {{ auth()->user()->email }}</p> <p><a href="/auth/logout">Logout</a></p> @else <p>User is not authenticated.</p> <p> <a href="/auth/google/redirect">Login with Google</a> </p> @endif
Gantikan kandungan ujian/Feature/AuthRoutesTest.php yang baru dibuat dengan yang berikut.
php artisan serve
Bagaimana ujian berfungsi
Apabila menguji laluan ubah hala, kami menguji bahawa Socialite mengubah hala ke URL yang betul dan melepasi parameter URL yang betul.
Apabila menguji laluan panggil balik, kami mengejek Socialite. Mengejek bukanlah pilihan kegemaran saya: dalam dunia yang ideal, kami boleh menukar Socialite untuk pelaksanaan OAuth2 yang lain dan ujian kami akan tetap berfungsi. Walau bagaimanapun, tiada cara lurus ke hadapan untuk menyambung permintaan geran kebenaran yang Socialite hantar untuk menghiasi token akses. Oleh sebab itu, mengejek adalah pendekatan paling praktikal untuk menguji Socialite.
API Fasih membosankan untuk dipermainkan melalui Olok-olok: anda mesti bermula dari panggilan akhir dan berjalan ke belakang.
Berikut ialah kaedah Socialite yang digunakan oleh titik akhir panggilan balik kami.
laravel new socialite-tests
Berikut ialah cara ia mesti diejek melalui Olok-olok:
┌ Would you like to install a starter kit? ────────────────────┐ │ No starter kit │ └──────────────────────────────────────────────────────────────┘ ┌ Which testing framework do you prefer? ──────────────────────┐ │ Pest │ └──────────────────────────────────────────────────────────────┘ ┌ Which database will your application use? ───────────────────┐ │ SQLite │ └──────────────────────────────────────────────────────────────┘ ┌ Would you like to run the default database migrations? ──────┐ │ Yes │ └──────────────────────────────────────────────────────────────┘
Akhir sekali, kami mempunyai ujian untuk memastikan bahawa menavigasi terus ke URL panggil balik di luar aliran OAuth mengembalikan kod status 400. Kami melengkapkan panggilan ke Socialite::driver('google')->user() dalam titik akhir panggil balik dalam blok try/catch. Jika kami tidak membungkus panggilan Socialite dalam blok try/catch dan seseorang menaip URL panggil balik ke dalam penyemak imbas mereka, titik akhir akan mengeluarkan pengecualian dengan kod status HTTP 500. Jika pasukan anda telah menyediakan pemantauan untuk 500 kod status, itu boleh menyebabkan seseorang mendapat halaman di tengah malam.
Membungkus
Ini ialah penyepaduan yang minimum, dan terdapat banyak lagi yang boleh dilaksanakan. Jika kami melaksanakan penyepaduan dengan penyedia sosial di mana e-mel pengguna boleh berubah, pelaksanaan ini tidak akan berfungsi kerana ia sepadan dengan alamat e-mel. Jika pengguna boleh menukar alamat e-mel mereka dalam apl kami, pelaksanaan ini juga tidak akan berfungsi atas sebab yang sama. Walau bagaimanapun, kini anda telah melihat cara untuk menguji Socialite, anda boleh menulis ujian untuk senario ini dan mengubah suai pelaksanaan asas supaya ia lulus.
Saya membaca banyak artikel blog dan siaran forum tentang Socialite sebelum saya memahami cara membina pelaksanaan saya sendiri, cara mengujinya dan perkara yang harus saya fikirkan. Saya ingin mengiktiraf sebahagian daripada mereka di sini.
- Cara saya menulis ujian penyepaduan untuk apl dikuasakan Laravel Socialite oleh Stefan Zweifel
- Forum ServerSideUp: Amalan Terbaik Sosialit, perbualan
- Limpahan Tindanan: Cara Menguji Laravel Socialite
- Stack Exchange: Untuk Memaut atau Tidak Memautkan Log Masuk Sosial dengan E-mel Padanan
- Stack Exchange: Berurusan dengan Akaun Sosial Terhubung dan Bakal Anak Yatim
Baca mereka jika anda berminat untuk menggali lebih dalam. Selain itu, beritahu saya jika anda berminat dengan bahagian 2 siaran ini di mana saya membincangkan pengendalian berbilang penyedia sosial, mengendalikan apabila pengguna menukar alamat e-mel mereka atau mengendalikan token muat semula.
Atas ialah kandungan terperinci Melaksanakan & menguji pengesahan Socialite dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Tomakephpapplicationsfaster, ikutiTheseSteps: 1) UseopcodecachinglikeopcachetostorePrecompiledscriptbytecode.2) minimizedatabasequeriesbyusingquerycachingandeficientindexing.3)

ToimprovePhpapPlicationspeed, ikutiTheSesteps: 1) EnableopCodeCachingWithApcutoreduceScriptExecutionTime.2) pelaksanaanDatabasequerycachingingPdotominimizedataBaseHits.3)

Suntikan ketergantungan (DI) dengan ketara meningkatkan kesesuaian kod PHP oleh kebergantungan transitif secara eksplisit. 1) Kelas Decoupling dan pelaksanaan khusus menjadikan ujian dan penyelenggaraan lebih fleksibel. 2) Di antara tiga jenis, pembina menyuntik kebergantungan ekspresi eksplisit untuk memastikan keadaan konsisten. 3) Gunakan bekas DI untuk menguruskan kebergantungan kompleks untuk meningkatkan kualiti kod dan kecekapan pembangunan.

DatabaseQueryoptimizationInpinvolvesseverSlegatiesToenhancePratePratePratePratePratePregiesToRperformance.1) selectOnlynessaryColumnStoReducedatatatransfer.2) UseIndexingTospeedupdatareTrieval.3) PrevancequerycachingToStoreresultSoffReFfeFfffffffffffffffffffffffffffffffffffffffffffferseprewfffffffffffersepresseprespersepresperseprespersepresperseprespersepresperseprespers

Phpisusedforsendingemailsduetoitsbuilt-inmail () functionAndSupportivelibrariesLikePhpmailerandswiftmailer.1) usethemail () functionforbasiceMails, butithaslimitations.2) scorkphpmailerforadvancedfeatures

Kesesakan prestasi PHP boleh diselesaikan melalui langkah -langkah berikut: 1) Gunakan XDEBUG atau Blackfire untuk analisis prestasi untuk mengetahui masalah; 2) Mengoptimumkan pertanyaan pangkalan data dan menggunakan cache, seperti APCU; 3) Gunakan fungsi yang cekap seperti array_filter untuk mengoptimumkan operasi array; 4) Konfigurasi Opcache untuk cache bytecode; 5) mengoptimumkan bahagian depan, seperti mengurangkan permintaan HTTP dan mengoptimumkan gambar; 6) Memantau dan mengoptimumkan prestasi secara berterusan. Melalui kaedah ini, prestasi aplikasi PHP dapat ditingkatkan dengan ketara.

DependencyInjection (DI) inphpisadesignPatternThatManagesandReducesclassdependencies, enhancingcodemodularity, testility, andmaintainability.itallowspassingdependenciesLikedatabaseconnectionstoclassesesparameters, fasilitasieAseAsiShanandscalability.

CachingimprovesphpperformanceSbebyStoringResultsofcomputationsorqueriesforquickretrieval, reducingserverloadandenhancingResponsetimes.effectiveStRegiesClude: 1) Opcodecaching, yang


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Dreamweaver CS6
Alat pembangunan web visual
