Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5
Code

Cara Membuat Custom Authentication Guard di Laravel

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Meyria (you can also view the original English article)

Dalam artikel ini, kita akan menutup sistem pengesahan dalam rangka kerja Laravel. Tujuan utama artikel ini adalah untuk membuat pengawasan pengesahan tersuai dengan memanjangkan sistem pengesahan teras.

Laravel menyediakan sistem pengesahan yang sangat padat di teras yang menjadikan pelaksanaan pengesahan dasar mudah. Malah, anda hanya perlu menjalankan beberapa arahan artis untuk menubuhkan perancah sistem pengesahan.

Selain itu, sistem itu sendiri direka sedemikian rupa sehingga anda boleh memanjangkannya dan pasang penyesuai adat pengesahan anda juga. Inilah yang akan dibincangkan secara terperinci di seluruh artikel ini. Sebelum kita pergi dan menyelam ke dalam pelaksanaan pengawasan pengesahan adat, kita akan bermula dengan perbincangan unsur-unsur asas dalam pengawal dan penyedia sistem pengesahan Laravel.

Elemen Teras: Pengawal dan Penyedia

Sistem pengesahan Laravel terdiri daripada dua unsur di penjaga teras dan pembekalnya.

Pengawal

Anda boleh memikirkan pengawal sebagai cara membekalkan logik yang digunakan untuk mengenal pasti pengguna yang disahkan. Inti, Laravel menyediakan penjaga yang berbeza seperti sesi dan token. Pengawal sesi mengekalkan keadaan pengguna dalam setiap permintaan oleh kuki, dan sebaliknya pengawal token mengesahkan pengguna dengan memeriksa token yang sah dalam setiap permintaan.

Oleh itu, seperti yang anda lihat, pengawal menentukan logik pengesahan, dan tidak perlu bahawa ia sentiasa berkaitan dengan itu dengan mendapatkan bukti kelayakan yang sah dari hujung belakang. Anda boleh melaksanakan pengawal yang hanya memeriksa kehadiran sesuatu yang spesifik dalam tajuk permintaan dan mengesahkan pengguna berdasarkan itu.

Kemudian dalam artikel ini, kami akan melaksanakan pengawal yang memeriksa parameter JSON tertentu dalam tajuk permintaan dan mengambil pengguna yang sah dari akhir belakang MongoDB.

Penyedia

Jika pengawal menentukan logik pengesahan, pembekal pengesahan bertanggungjawab untuk mengambil semula pengguna dari storan belakang. Jika pengawal mengharuskan pengguna harus disahkan terhadap penyimpanan back-end maka pelaksanaan pengambilan pengguna masuk ke penyedia pengesahan.

Laravel kapal dengan dua pembekal pengesahan lalai-Pangkalan Data dan Eloquent. Pembekal pengesahan pangkalan data memperkatakan pengambilan langsung dari kelayakan pengguna dari penyimpanan back-end, sementara Eloquent menyediakan lapisan abstraksi yang diperlukan.

Dalam contoh kami, kami akan melaksanakan pembekal pengesahan MongoDB yang memperoleh kelayakan pengguna dari akhir belakang MongoDB.

Jadi itu pengenalan dasar kepada pengawal dan pembekal dalam sistem pengesahan Laravel. Dari bahagian seterusnya dan seterusnya, kami akan memberi tumpuan kepada pembangunan pengawal dan penyedia pengesahan tersuai!

Pandangan Pantas pada Penyediaan Fail

Mari kita lihat pada senarai fail yang akan kami laksanakan sepanjang perjalanan artikel ini.

  • config/auth.php: Ini adalah fail konfigurasi pengesahan di mana kami akan menambah kemasukan penjaga peribadi kami.
  • config/mongo.php: Ini adalah fail yang memegang konfigurasi MongoDB.
  • app/Services/Contracts/NosqlServiceInterface.php:  Ia merupakan antara muka yang digunakan oleh kelas pangkalan data Mongo kami.
  • app/Database/MongoDatabase.php: Ia adalah kelas pangkalan data utama yang berinteraksi dengan MongoDB.
  • app/Models/Auth/User.php: Ia adalah kelas model Pengguna yang melaksanakan kontrak yang sah.
  • app/Extensions/MongoUserProvider.php: Ini adalah pelaksanaan penyedia pengesahan.
  • app/Services/Auth/JsonGuard.php: Ini adalah pelaksanaan pemandu pengawasan pengesahan.
  • app/Providers/AuthServiceProvider.php: Ini adalah fail sedia ada yang akan kami gunakan untuk menambah pengikat bekas perkhidmatan kami.
  • app/Http/Controllers/MongoController.php: Ini adalah fail pengawal demo yang akan kami laksanakan untuk menguji pengawal peribadi kami.

Jangan risau jika senarai fail tidak banyak lagi kerana kami akan membincangkan semuanya secara terperinci apabila kami meneruskannya.

Deep Dive Ke Dalam Pelaksanaan

Dalam bahagian ini, kami akan meneruskan pelaksanaan fail yang diperlukan.

Perkara pertama yang perlu kita lakukan adalah untuk memberitahu Laravel tentang pengawal peribadi kami. Teruskan dan masukkan butiran penjaga peribadi dalam fail config/auth.php seperti yang ditunjukkan.

Seperti yang anda dapat lihat, kami telah menambah pengawal peribadi kami di bawah custom key.

Seterusnya, kami perlu menambah kemasukan pembekal bersekutu di bahagian providers.

Kami telah menambah penyedia penyedia kami di bawah mongo key.

Akhir sekali, mari tukar pengawal pengesahan lalai dari web ke adat.

Sudah tentu, ia tidak akan berfungsi lagi, kerana kami belum lagi melaksanakan fail yang diperlukan. Dan itulah yang akan kita bincangkan dalam beberapa bahagian seterusnya.

Sediakan Dirver MongoDB

Dalam bahagian ini, kami akan melaksanakan fail yang diperlukan yang bercakap dengan contoh MongoDB yang mendasari.

Mari kita buat konfigurasi fail config/mongo.php terlebih dahulu yang memegang tetapan sambungan MongoDB lalai.

Sudah tentu, anda perlu mengubah nilai pemegang tempat mengikut tetapan anda.

Daripada terus mencipta kelas yang berinteraksi dengan MongoDB, kami akan membuat antara muka di tempat pertama.

Keuntungan mewujudkan antara muka adalah ia menyediakan kontrak yang mesti dipatuhi oleh pemaju semasa melaksanakannya. Juga, pelaksanaan MongoDB dapat dengan mudah ditukar dengan pelaksanaan NoSQL yang lain jika diperlukan.

Teruskan dan buat fail app/Services/Contracts/NosqlServiceInterface.php dengan kandungan berikut.

Ia antara muka yang cukup mudah yang mengisytiharkan kaedah CRUD asas bahawa kelas mesti menentukan yang melaksanakan antara muka ini.

Sekarang, mari kita tentukan kelas sebenar di app/Database/MongoDatabase.php.

Sudah tentu, saya menganggap bahawa anda telah memasang MongoDB dan pelanjutan PHP yang berkaitan dengan MongoDB.

Kaedah __construct menamakan kelas MongoClient dengan parameter yang diperlukan. Kaedah penting lain yang kami berminat ialah kaedah find, yang mengambil rekod berdasarkan kriteria yang disediakan sebagai argumen kaedah.

Jadi itulah pelaksanaan pemandu MongoDB, dan saya cuba simpannya semudah mungkin.

Sediakan Model Pengguna

Mematuhi piawaian sistem pengesahan, kami perlu melaksanakan model Pengguna yang mesti melaksanakan kontrak Illuminate\Contracts\Auth\Authenticatable.

Teruskan dan buat fail app/Models/Auth/User.php dengan kandungan berikut.

Anda sepatutnya menyedari bahawa kontak App\Models\Auth\User menerapkan Illuminate\Contracts\Auth\Authenticatable.

Kebanyakan kaedah yang dilaksanakan di dalam kelas kami adalah jelas. Setelah mengatakannya, kami telah menentukan kaedah fetchUserByCredentialss, yang mengambil semula pengguna dari hujung belakang yang tersedia. Dalam kes kami, ia akan menjadi kelas MongoDatabase yang akan dipanggil untuk mendapatkan maklumat yang diperlukan.

Jadi itulah pelaksanaan model Pengguna.

Sediakan Penyedia Pengesahan

Seperti yang telah dibincangkan sebelumnya, sistem pengesahan Laravel terdiri daripada dua unsur-penjaga dan pembekal.

Dalam bahagian ini, kami akan mencipta pembekal pengesahan yang berkaitan dengan pengambilan pengguna dari hujung belakang.

Teruskan dan buat fail app/Extensions/MongoUserProvider.php seperti yang ditunjukkan di bawah.

Sekali lagi, anda perlu memastikan bahawa pembekal kustom mesti melaksanakan kontrak Illuminate\Contracts\Auth\UserProvider.

Bergerak ke depan, ia mentakrifkan dua kaedah penting -mengambil semulaByCredentials dan validateCredentials.

Kaedah retrieveByCredentials yang diambil kembali digunakan untuk mendapatkan bukti kelayakan pengguna menggunakan kelas model Pengguna yang dibincangkan di bahagian sebelumnya. Sebaliknya, kaedah validateCredentials digunakan untuk mengesahkan pengguna terhadap set credentials yang diberikan.

Dan itu adalah pelaksanaan penyedia pengesahan adat kami. Di bahagian seterusnya, kami akan teruskan dan membuat pengawal yang berinteraksi dengan pembekal pengesahan MongoUserProvider.

Sediakan Pengawal Pengesahan

Seperti yang telah dibincangkan sebelumnya, pengawal dalam sistem pengesahan Laravel memberi peruntukan bagaimana pengguna disahkan. Dalam kes kami, kami akan memeriksa kehadiran parameter permintaan jsondata yang sepatutnya mengandungi rentetan tafsiran JSON yang dikodkan.

Dalam bahagian ini, kami akan membuat penjaga yang berinteraksi dengan pembekal pengesahan yang baru saja dibuat dalam bahagian terakhir.

Teruskan dan buat fail app/Services/Auth/JsonGuard.php dengan kandungan berikut.

Pertama sekali, kelas kami perlu melaksanakan antara muka Illuminate\Contracts\Auth\Guard. Oleh itu, kita perlu menentukan semua kaedah yang diisytiharkan dalam antara muka tersebut.

Perkara penting yang perlu diperhatikan di sini adalah fungsi__construct  yang memerlukan pelaksanaan Illuminate\Contracts\Auth\UserProvider. Dalam kes kita, kita akan lalui contoh App\Extensions\MongoUserProvider, seperti yang akan kita lihat di bahagian kemudian.

Seterusnya, ada fungsi getJsonParams yang mengambil semula kelayakan pengguna dari parameter permintaan bernama jsondata. Seperti yang dijangkakan bahawa kami akan menerima rentetan yang dikodkan oleh JSON bagi kelayakan pengguna, kami telah menggunakan fungsi json_decode untuk menodalkan data JSON.

Dalam fungsi yang sahkan, perkara pertama yang kami periksa ialah kewujudan argumen $credentials. Sekiranya tidak hadir, kami akan menghubungi kaedah getJsonParams untuk mendapatkan kelayakan pengguna dari parameter permintaan.

Seterusnya, kami menghubungi kaedah retrieveByCredentials untuk mendapatkan pembekal MongoUserProvider yang mengambil semula pengguna dari pangkalan data MongoDB. Akhirnya, ia adalah kaedah validatedCredentials dari pembekal MongoUserProvider yang memeriksa kesahihan Pengguna.

Jadi itulah pelaksanaan pengawal adat kita. Bahagian seterusnya menerangkan cara mencetak kepingan ini untuk membentuk sistem pengesahan yang berjaya.

Meletakkan Semuanya Bersama-sama

Setakat ini, kami telah membangunkan semua unsur pengawasan pengesahan adat yang seharusnya memberikan kami sistem pengesahan baru. Bagaimanapun, ia tidak akan keluar dari kotak kerana kita perlu mendaftarkannya di tempat pertama menggunakan pengikat kontena perkhidmatan Laravel.

Seperti yang anda sudah tahu, pembekal perkhidmatan Laravel adalah tempat yang tepat untuk melaksanakan pengikatan yang diperlukan.

Teruskan dan buka file app/Providers/AuthServiceProvider.php  yang membolehkan kami menambah pengikatan perkhidmatan pengesahan pengesahan. Jika ia tidak mengandungi sebarang perubahan tersuai, anda hanya boleh menggantikannya dengan kandungan berikut.

Mari kita melalui kaedah boot yang mengandungi kebanyakan pengikat penyedia.

Untuk bermula, kami akan membuat pengikat untuk App\Database\MongoDatabase dan elemen App\Models\Auth\User.

Sudah lama kita bercakap tentang penyedia dan pengawal, dan sudah tiba masanya untuk memasang pengawas adat kita ke dalam sistem pengesahan Laravel.

Kami telah menggunakan kaedah penyedia Auth Facade untuk menambah pembekal pengesahan tersuai kami di bawah mongo kunci. Ingat bahawa kunci mencerminkan tetapan yang telah ditambahkan sebelum ini dalam fail auth.php.

Dengan cara yang sama, kami akan menyuntik pelaksanaan pengawasan adat kami menggunakan kaedah extend dari facade Auth.

Seterusnya, terdapat kaedah daftar yang kami gunakan untuk mengikat antara muka App\Services\Contracts\NosqlServiceInterface ke implementasi App\Database\MongoDatabase.

 Oleh itu, apabila ada keperluan untuk menyelesaikan pergantungan App\Services\Contracts\NosqlServiceInterface, Laravel bertindak balas dengan pelaksanaan penyesuai App\Database\MongoDatabase.

Manfaat menggunakan pendekatan ini adalah bahawa seseorang dapat dengan mudah menukar pelaksanaan yang diberikan dengan pelaksanaan khusus. Sebagai contoh, katakan seseorang ingin menggantikan pelaksanaan App\Database\MongoDatabase dengan penyesuai CouchDB pada masa akan datang. Dalam kes itu, mereka hanya perlu menambah pengikatan yang sama dalam kaedah daftar.

Jadi itu penyedia perkhidmatan yang anda perlukan. Pada masa ini, kami mempunyai segala-galanya yang diperlukan untuk menguji pelaksanaan penjagaan peribadi kami, jadi bahagian seterusnya dan penutup adalah semua tentang itu.

Adakah ia berfungsi?

Anda telah melakukan semua kerja keras yang menubuhkan pengawal pengesahan tersuai pertama anda, dan kini sudah tiba masanya untuk meraih faedah seperti yang kita akan teruskan dan mencubanya.

Mari kita dengan cepat melaksanakan aplikasi fail pengawal yang cukup asas app/Http/Controllers/MongoController.php seperti yang ditunjukkan di bawah.

Lihatlah kebergantungan kaedah log masuk, yang memerlukan pelaksanaan Illuminate\Contracts\Auth\Guard guard. Oleh kerana kami telah menetapkan custom pengawal sebagai pengawal lalai dalam fail auth.php, itu App\Services\Auth\JsonGuard yang akan disuntik sebenarnya!

Seterusnya, kami telah memanggil kaedah mengesahkan kelas App\Services\Auth\JsonGuard, yang seterusnya memulakan satu siri panggilan kaedah:

  • Ia memanggil kaedah semula retrieveByCredentials dari kelas App\Extensions\MongoUserProvider.
  • Kaedah retrieveByCredentials mengambil semula kaedah fetchUserByCredentials bagi pengguna kelas App\Model\Auth\Pengguna.
  • Kaedah fetchUserByCredentials memanggil cari kaedahApp\Database\MongoDatabase untuk mendapatkan bukti kelayakan pengguna.
  • Akhirnya, kaedah cari App\Database\MongoDatabase mengembalikan respons!

Sekiranya semuanya berfungsi seperti yang diharapkan, kita harus mendapatkan pengguna yang disahkan dengan menghubungi kaedah pengguna pengawal kami.

Untuk mengakses pengawal, anda harus menambah laluan yang berkaitan dalam fail laluan/web.php.

Cuba akses URL http://your-laravel-site/custom/mongo/login tanpa melewatkan sebarang parameter dan anda harus melihat mesej "tidak dibenarkan".

Sebaliknya, cuba semak seperti http://your-laravel-site/custom/mongo/login?Jsondata={"username":"admin", "password":"admin"} dan itu harus kembali mesej sukses jika pengguna hadir dalam pangkalan data anda.

Sila ambil perhatian bahawa ini hanya sebagai contoh tujuan, untuk menunjukkan bagaimana pengawal peribadi berfungsi. Anda harus melaksanakan penyelesaian yang mudah untuk digunakan seperti login. Malah, saya hanya memberikan wawasan tentang aliran pengesahan; anda bertanggungjawab untuk membina penyelesaian yang mantap dan selamat untuk permohonan anda.

Itu berakhir perjalanan kami hari ini, dan semoga saya akan kembali dengan barangan yang lebih berguna. Jika anda mahu saya menulis pada mana-mana topik tertentu, jangan lupa untuk menggugurkan saya garis!

Kesimpulan

Rangka kerja Laravel menyediakan sistem pengesahan pepejal yang kukuh yang boleh diperluaskan jika anda ingin melaksanakan sesuatu yang diperibadikan. Itu adalah topik artikel hari ini untuk melaksanakan pengawal peribadi dan memasukkannya ke aliran kerja pengesahan Laravel.

Dalam masa itu, kami terus maju dan membangunkan sistem yang membenarkan pengguna berdasarkan JSON payload dalam permintaan dan sepadan dengan pangkalan data MongoDB. Dan untuk mencapai itu, kami akhirnya membuat pengawal peribadi dan pelaksanaan penyedia adat.

Saya berharap latihan ini memberikan anda gambaran tentang aliran pengesahan Laravel, dan kini anda harus berasa lebih yakin tentang kerja dalamannya.

Bagi anda yang baru sahaja bermula dengan Laravel atau ingin memperluas pengetahuan, laman web, atau aplikasi dengan sambungan, kami mempunyai pelbagai perkara yang anda boleh belajar di Envato Market.

Saya ingin mendengar maklum balas dan cadangan anda, jadi berteriak dengan kuat menggunakan suapan di bawah!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.