


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 --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Laravel Socialite Testing Example</title> </head> <body> <h1>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 </body> </html>
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!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

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

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

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

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

TosecurelyhandleAuthenticationandauthorizationInphp, ikuti: 1.alwayshashpasswordswithpassword_hash () andverifyUsingPassword_verify (), usePePreparedStatementStopreventsqlInjection, andStoreUserDatain $ _SessionAsLogin.2.implescureRoleRoleRoleRoleRole

Untuk mengendalikan muat naik fail dengan selamat di PHP, terasnya adalah untuk mengesahkan jenis fail, menamakan semula fail, dan menyekat kebenaran. 1. Gunakan finfo_file () untuk memeriksa jenis mime sebenar, dan hanya jenis tertentu seperti imej/jpeg dibenarkan; 2. Gunakan uniqid () untuk menghasilkan nama fail rawak dan simpannya dalam direktori akar bukan web; 3. Hadkan saiz fail melalui borang php.ini dan html, dan tetapkan kebenaran direktori ke 0755; 4. Gunakan Clamav untuk mengimbas malware untuk meningkatkan keselamatan. Langkah -langkah ini dengan berkesan menghalang kelemahan keselamatan dan memastikan bahawa proses muat naik fail adalah selamat dan boleh dipercayai.

Dalam PHP, perbezaan utama antara == dan == adalah ketat pemeriksaan jenis. == Penukaran jenis akan dilakukan sebelum perbandingan, contohnya, 5 == "5" pulangan benar, dan === meminta nilai dan jenis adalah sama sebelum benar akan dikembalikan, sebagai contoh, 5 === "5" mengembalikan palsu. Dalam senario penggunaan, === lebih selamat dan harus digunakan terlebih dahulu, dan == hanya digunakan apabila penukaran jenis diperlukan.

Kaedah menggunakan operasi matematik asas dalam PHP adalah seperti berikut: 1. Tanda tambahan menyokong bilangan bulat dan nombor terapung, dan juga boleh digunakan untuk pembolehubah. Nombor rentetan akan ditukar secara automatik tetapi tidak disyorkan kepada kebergantungan; 2. Tanda -tanda pengurangan - tanda, pembolehubah adalah sama, dan penukaran jenis juga terpakai; 3. Tanda -tanda pendaraban menggunakan tanda *, yang sesuai untuk nombor dan rentetan yang serupa; 4. Bahagian menggunakan / tanda, yang perlu mengelakkan pembahagian dengan sifar, dan perhatikan bahawa hasilnya mungkin nombor terapung; 5. Mengambil tanda modulus boleh digunakan untuk menilai angka ganjil dan bahkan, dan apabila memproses nombor negatif, tanda -tanda selebihnya selaras dengan dividen. Kunci untuk menggunakan pengendali ini dengan betul adalah untuk memastikan bahawa jenis data adalah jelas dan keadaan sempadan ditangani dengan baik.

Ya, PHP boleh berinteraksi dengan pangkalan data NoSQL seperti MongoDB dan Redis melalui sambungan atau perpustakaan tertentu. Pertama, gunakan pemacu MongoDBPHP (dipasang melalui PECL atau komposer) untuk membuat contoh pelanggan dan mengendalikan pangkalan data dan koleksi, penyisipan sokongan, pertanyaan, pengagregatan dan operasi lain; Kedua, gunakan perpustakaan predis atau lanjutan phpredis untuk menyambung ke REDIS, lakukan tetapan dan pengambilalihan nilai utama, dan mengesyorkan PHPREDI untuk senario berprestasi tinggi, sementara Predis mudah untuk penempatan pesat; Kedua-duanya sesuai untuk persekitaran pengeluaran dan didokumentasikan dengan baik.

Tostaycurrentwithphpdevelopmentsandbestpractices, followeyNewsssourcesLikePhp.netandphpweekly, engageWithCommunitiesonforumsandconference, keeptoolingupdatedandgraduallyAdoptNewFeatures, dan readribcoursourcourceSource

Phpbecamepopularforwebdevelopmentduetoitseaseoflearning, seamlessintegrationwithhtml, widespreadhostingsupport, andalargeecosystemincludingframeworkslikelaravelandcmsplatformsLikeWordPress.itexcelsinhandessubmissions

TosetTheRightTimeZoneinPhp, USEDATE_DEFAULT_TIMEZONE_SET () functionAtthestArtAfyourscriptwithavalididentifiersuchas'america/new_york'.1.usedate_default_timeSet ()
