Rumah >pembangunan bahagian belakang >tutorial php >Log masuk sosial di PHP dengan hybridauth

Log masuk sosial di PHP dengan hybridauth

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-02-18 11:26:10552semak imbas

Banyak laman web moden membolehkan pengguna log masuk melalui akaun rangkaian sosial mereka. Sebagai contoh, komuniti SitePoint membolehkan pengguna log masuk dengan akaun Facebook, Twitter, Google, Yahoo, atau GitHub mereka tanpa mendaftar untuk akaun baru.

Social Logins in PHP with HybridAuth

Tutorial ini akan memperkenalkan Hybridauth - perpustakaan PHP yang memudahkan pembinaan keupayaan log masuk sosial.

Hybridauth bertindak sebagai API abstrak antara aplikasi dan pelbagai API sosial dan penyedia identiti.

mata utama

    Hybridauth adalah perpustakaan PHP yang direka untuk memudahkan integrasi log masuk sosial ke laman web anda dan bertindak sebagai lapisan tengah antara aplikasi anda dan pelbagai API sosial.
  • Adalah disyorkan untuk memasang hybridauth melalui komposer, dan kelayakan khusus diperlukan untuk setiap rangkaian sosial seperti Facebook, Google, dan Twitter berfungsi dengan baik.
  • Perpustakaan ini menggunakan OAuth untuk akses yang selamat, memastikan kelayakan pengguna dilindungi semasa pengesahan.
  • HybridAuth membolehkan proses pengesahan pengguna tersuai, tidak bergantung pada e -mel atau nama pengguna, tetapi menggunakan pengenal unik yang disediakan oleh rangkaian sosial.
  • Tutorial ini menyediakan demonstrasi praktikal menggunakan rangka kerja Slim PHP, yang memperincikan langkah-langkah dari menubuhkan persekitaran untuk menulis aplikasi demo yang lengkap yang mengendalikan pendaftaran pengguna, log masuk, dan logout melalui rangkaian sosial.

Pemasangan

Komposer disyorkan untuk memasang HybridAuth. Kami juga akan menggunakan Slim sebagai asas untuk aplikasi sampel.

<code>{
    "require": {
        "slim/slim": "2.*",
        "hybridauth/hybridauth": "2.3.0"
    }
}</code>

log masuk sosial dengan hybridauth

untuk menggunakan hybridauth, salin

dan /vendor/hybridauth/hybridauth/hybridauth (fail endpoint hybridauth) dalam folder config.php ke folder root projek anda. index.php

Namakan semula fail

ke index.php kerana hybrid.php akan digunakan oleh kerangka Slim untuk logik aplikasi demo kami. index.php

Isi fail

dengan aplikasi anda (mis. Facebook, aplikasi Twitter). config.php

Sebagai contoh, jika anda mahu pengguna log masuk ke laman web anda melalui Facebook, Google, dan Twitter; URL Permohonan saya ialah

. http://slim.local

<code>return 
    [
        "base_url"   => "http://slim.local/",
        "providers"  => [
            "Google"   => [
                "enabled" => true,
                "keys"    => [ "id" => "", "secret" => "" ],
            ],
            "Facebook" => [
                "enabled"        => true,
                "keys"           => [ "id" => "", "secret" => "" ],
                "trustForwarded" => false
            ],
            "Twitter"  => [
                "enabled" => true,
                "keys"    => [ "key" => "", "secret" => "" ]
            ],
        ],
        "debug_mode" => true,
        "debug_file" => "bug.txt",
    ];</code>
Nota: Parameter

mesti menunjuk pada fail endpoint hybridauth, dalam kes ini base_url. hybrid.php

Rujuk dokumentasi konfigurasi HybridAuth untuk maklumat lanjut.

Seterusnya, muatkan autoloader vendor dan instantiate kelas.

<code>require 'vendor/autoload.php';
$hybridauth = new Hybrid_Auth( 'config.php' );</code>
Gunakan kaedah

untuk mengesahkan pengguna menggunakan pembekal yang diberikan. authenticate

untuk Facebook:

<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>
untuk Twitter:

<code>$adapter = $hybridauth->authenticate( "Twitter" );</code>
untuk google:

Parameter yang diluluskan ke

mesti sepadan dengan kekunci array pembekal dalam fail
<code>$adapter = $hybridauth->authenticate( "Google" );</code>
.

Selepas pengesahan, gunakan kaedah

untuk mendapatkan data profil pengguna. getUserProfile()

Pembolehubah
<code>{
    "require": {
        "slim/slim": "2.*",
        "hybridauth/hybridauth": "2.3.0"
    }
}</code>

akan menjadi objek yang mengandungi data profil pengguna yang dikembalikan. $user_profile

lebih banyak penyedia sosial

Untuk menambah lebih banyak pembekal, seperti GitHub, salin fail

dari GitHub.php ke lokasi dalam permohonan (dalam hal ini direktori pembekal). Muatkan fail menggunakan pembalut pembekal, di mana vendor/hybridauth/hybridauth/additional-providers/hybridauth-github/Providers adalah laluan ke fail github dan path adalah nama kelas PHPnya. class

<code>return 
    [
        "base_url"   => "http://slim.local/",
        "providers"  => [
            "Google"   => [
                "enabled" => true,
                "keys"    => [ "id" => "", "secret" => "" ],
            ],
            "Facebook" => [
                "enabled"        => true,
                "keys"           => [ "id" => "", "secret" => "" ],
                "trustForwarded" => false
            ],
            "Twitter"  => [
                "enabled" => true,
                "keys"    => [ "key" => "", "secret" => "" ]
            ],
        ],
        "debug_mode" => true,
        "debug_file" => "bug.txt",
    ];</code>
Gunakan kaedah Hybridauth

untuk mengesahkan pengguna menggunakan GitHub, seperti yang ditunjukkan di bawah: authenticate()

<code>require 'vendor/autoload.php';
$hybridauth = new Hybrid_Auth( 'config.php' );</code>

Pelaksanaan log masuk sosial

Biasanya, setiap laman web dengan sistem log masuk dan pendaftaran menggunakan alamat e -mel pengguna atau nama pengguna untuk mengenal pasti dan log masuk ke akaun mereka. Jika anda merancang untuk melaksanakan log masuk sosial, disarankan untuk tidak menggunakan nama pengguna atau e -mel pengguna untuk pengesahan.

Salah satu sebab untuk membantah amalan ini ialah, sebagai contoh, Twitter tidak mengembalikan alamat e -mel pengguna yang telah disahkan melaluinya. Iaitu, data profil yang dikembalikan tidak mengandungi e -mel pengguna.

Kebanyakan, jika tidak semua, penyedia sosial, seperti Facebook, Twitter, Google, LinkedIn dan juga GitHub, mengembalikan nombor ID pengguna yang unik selepas kebenaran.

Jangan log masuk ke akaun pengguna menggunakan e -mel pengguna, tetapi gunakan pengenalpastian yang dikembalikan oleh pembekal sosial, seperti yang ditunjukkan di bawah: Buat akaun pengguna jika pengguna tidak mempunyai akaun; akaun pergi ke laman web.

Menulis aplikasi demo

Kami akan menggunakan rangka kerja Slim PHP untuk membina aplikasi web mudah untuk menunjukkan contoh praktikal bagaimana untuk melaksanakan log masuk sosial menggunakan hybridauth.

Saya menganggap anda mempunyai rangka kerja hybridauth dan tipis. Jika tidak, rujuk kepada panduan pemasangan di atas.

Struktur Aplikasi

<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>
Ini adalah SQL untuk jadual pangkalan data.

<code>$adapter = $hybridauth->authenticate( "Twitter" );</code>
menulis model aplikasi

Semua kod untuk model aplikasi hendaklah diletakkan dalam fail app_model.php dalam folder SRC.

Ruang nama fail adalah model, diikuti dengan definisi kelas dan pembina.

<code>$adapter = $hybridauth->authenticate( "Google" );</code>

Kaedah mengembalikan benar jika pengenal (nombor pengenalan pengguna) sudah ada dalam pangkalan data, jika tidak, pulangan palsu. identifier_exists

<code>$user_profile = $adapter->getUserProfile();</code>

Kaedah Masukkan data profil pengguna ke dalam pangkalan data. register_user

Kaedah
<code>"Github"   => [
    "enabled" => true,
    "keys"    => [
        "id"     => "",
        "secret" => ""
    ],
    "wrapper" => [ "path" => "providers/GitHub.php", "class" => "Hybrid_Providers_GitHub" ]
]</code>

menambah sesi pengguna yang dibuat ke sesi HybridAuth apabila dipanggil (dibuat selepas pembekal berjaya memberi kuasa kepada pengguna). login_user

<code>$adapter = $hybridauth->authenticate( "Github" );</code>

kaedah memadam atau memusnahkan sesi pengguna apabila mengklik pautan logout. logout_user

<code>|-scr/
|----App_Model.php
|-templates/
|----login.php
|----welcome.php
|-vendor/
|-composer.json
|-config.php
|-hybrid.php
|-index.php
|-.htaccess</code>
Akhir sekali, kaedah getter mengembalikan nama pengguna, e -mel, dan url avatar.

<code>{
    "require": {
        "slim/slim": "2.*",
        "hybridauth/hybridauth": "2.3.0"
    }
}</code>

Daftar Autoloader PSR-4 untuk kelas model dengan menambahkan kod berikut ke fail komposer.json anda.

<code>return 
    [
        "base_url"   => "http://slim.local/",
        "providers"  => [
            "Google"   => [
                "enabled" => true,
                "keys"    => [ "id" => "", "secret" => "" ],
            ],
            "Facebook" => [
                "enabled"        => true,
                "keys"           => [ "id" => "", "secret" => "" ],
                "trustForwarded" => false
            ],
            "Twitter"  => [
                "enabled" => true,
                "keys"    => [ "key" => "", "secret" => "" ]
            ],
        ],
        "debug_mode" => true,
        "debug_file" => "bug.txt",
    ];</code>

run untuk menjana semula fail composer dump-autoload. vendor/autoload.php

Aplikasi Logik

Komposer beban dalam aplikasi

Fail secara automatik memuat fail dan instantiates Slim.

index.php 3

<code>require 'vendor/autoload.php';
$hybridauth = new Hybrid_Auth( 'config.php' );</code>
Buat sumber pangkalan data Slim Singleton yang akan mengembalikan contoh sambungan pangkalan data apabila dipanggil.

<code>$adapter = $hybridauth->authenticate( "Facebook" );</code>
Satu lagi sumber tunggal yang mengembalikan contoh hybridauth juga dibuat.

<code>$adapter = $hybridauth->authenticate( "Twitter" );</code>
Mintaate kelas model aplikasi dengan lulus sambungan pangkalan data sebagai parameter.

<code>$adapter = $hybridauth->authenticate( "Google" );</code>
Fungsi

berikut apabila ditambah sebagai parameter ke laluan, jika pengguna tidak log masuk, ia akan mengarahkannya ke halaman log masuk.

<code>$user_profile = $adapter->getUserProfile();</code>

mengalihkan pengguna log keluar ke halaman log masuk apabila dia mengakses halaman rumah atau halaman indeks aplikasi. authenticate

<code>"Github"   => [
    "enabled" => true,
    "keys"    => [
        "id"     => "",
        "secret" => ""
    ],
    "wrapper" => [ "path" => "providers/GitHub.php", "class" => "Hybrid_Providers_GitHub" ]
]</code>
Berikut adalah definisi penghalaan untuk pautan log masuk sosial. Iaitu, apabila pautan

diklik, HybridAuth mengalihkan pengguna ke Facebook untuk kebenaran. Begitu juga untuk Twitter

, Google
<code>$adapter = $hybridauth->authenticate( "Github" );</code>
dan semua penyedia yang disokong lain.

http://slim.local/login/facebook http://slim.local/login/twitter Memanggil kaedah hybridauth mengalihkan pengguna kepada penyedia sosial yang diberikan. http://slim.local/login/google

Selepas kebenaran yang berjaya, pembolehubah
<code>|-scr/
|----App_Model.php
|-templates/
|----login.php
|----welcome.php
|-vendor/
|-composer.json
|-config.php
|-hybrid.php
|-index.php
|-.htaccess</code>
akan mengisi data profil pengguna.

authenticate() Panggil kaedah

untuk memeriksa sama ada pengenal pengguna wujud dalam pangkalan data. Jika benar, pengguna log masuk ke laman web. Jika tidak, akaun dibuat untuk pengguna dan pengguna dilog masuk.

$user_profile Ini adalah kod untuk log keluar laluan.

identifier_exists() Kaedah

yang telah dibincangkan dalam kelas model dipanggil untuk memusnahkan sesi pengguna, dan juga untuk log keluar dari penyedia sambungan pengguna.

Laluan halaman selamat datang diarahkan oleh pengguna selepas log masuk:
<code class="language-sql">CREATE TABLE IF NOT EXISTS `users` (
`id` int(10) NOT NULL AUTO_INCREMENT,
PRIMARY KEY  (id),
  `identifier` varchar(50) NOT NULL,
UNIQUE KEY `identifier` (`identifier`),
  `email` varchar(50) DEFAULT NULL,
  `first_name` varchar(20) DEFAULT NULL,
  `last_name` varchar(20) DEFAULT NULL,
  `avatar_url` varchar(255)
) ENGINE=InnoDB;</code>

logout_user Akhirnya, jalankan aplikasi Slim. Hybrid_Auth::logoutAllProviders()

Lihat repositori GitHub aplikasi untuk kod sumber lengkap.

<code class="language-php"><?php namespace Model;

class App_Model
{

    /** @var object Database connection */
    private $conn;

    /**
     * Instantiate the model class.
     *
     * @param object $db_connection DB connection
     */
    public function __construct(\PDO $db_connection)
    {
        $this->conn = $db_connection;
    }

    // ... rest of the methods ...
}</code>

Kesimpulan

<code class="language-php">/**
     * Check if a HybridAuth identifier already exists in DB
     *
     * @param int $identifier
     *
     * @return bool
     */
    public function identifier_exists($identifier)
    {
        try {
            $sql    = 'SELECT identifier FROM users';
            $query  = $this->conn->query($sql);
            $result = $query->fetchAll(\PDO::FETCH_COLUMN, 0);

            return in_array($identifier, $result);
        } catch ( \PDOException $e ) {
            die( $e->getMessage() );
        }

    }</code>

Dalam artikel ini, kami belajar bagaimana mengintegrasikan keupayaan log masuk sosial dengan laman web menggunakan perpustakaan Hybridauth PHP yang kuat dan mantap.

Jika anda mempunyai sebarang pertanyaan atau sumbangan, sila beritahu kami dalam komen.

FAQ (FAQ) untuk log masuk sosial dengan PHP dan Hybridauth

Apa itu Hybridauth dan bagaimana ia digunakan dengan PHP untuk log masuk sosial?

HybridAuth adalah perpustakaan log masuk sosial sumber terbuka yang popular. Ia membolehkan pemaju web dengan mudah membina aplikasi sosial dengan menyediakan cara mudah untuk mengesahkan pengguna melalui akaun media sosial mereka. Hybridauth bertindak sebagai API abstrak antara aplikasi dan pelbagai API sosial dan penyedia identiti seperti Facebook, Twitter, dan Google. Ia berfungsi dengan mengintegrasikan dengan sistem log masuk sedia ada dalam aplikasi PHP dan menambah keupayaan log masuk sosial.

Bagaimana untuk memasang dan mengkonfigurasi Hybridauth dalam aplikasi PHP saya?

Hybridauth boleh dipasang melalui komposer (alat pengurusan ketergantungan dalam PHP). Selepas pemasangan, anda perlu mengkonfigurasinya dengan menubuhkan pembekal yang anda mahu gunakan (rangkaian sosial). Setiap penyedia memerlukan satu set parameter yang unik, seperti kunci dan kunci, yang boleh anda peroleh dengan membuat aplikasi pada platform pemaju setiap rangkaian sosial.

Apakah tahap keselamatan hybridauth untuk log masuk sosial?

Hybridauth sangat selamat kerana ia menggunakan OAuth, standard perwakilan akses terbuka. OAuth menyediakan akses yang selamat, yang bermaksud bahawa pengguna boleh memberikan kebenaran laman web untuk mengakses maklumat mereka di laman web lain tanpa memberikannya kata laluan. Ini menjadikan Hybridauth sebagai pilihan yang selamat untuk log masuk sosial.

Bolehkah saya menggunakan hybridauth untuk log masuk sosial di beberapa laman web?

Ya, Hybridauth boleh digunakan di beberapa laman web. Anda hanya perlu menggunakan Perpustakaan Konfigurasi URL Panggilan Betul untuk setiap laman web. Ini menjadikannya penyelesaian yang fleksibel untuk pemaju yang menguruskan beberapa laman web.

Bagaimana menangani kesilapan dalam hybridauth?

Hybridauth mempunyai sistem pengendalian ralat terbina dalam. Apabila ralat berlaku, ia melemparkan pengecualian yang boleh anda tangkap dan mengendalikan berdasarkan dasar pengendalian ralat aplikasi anda. Ini menjadikan masalah debug dan membetulkan lebih mudah.

Bolehkah saya menyesuaikan rupa dan gaya butang log masuk sosial Hybridauth?

Ya, anda boleh menyesuaikan rupa dan gaya butang log masuk sosial. Hybridauth menawarkan keupayaan log masuk sosial, tetapi reka bentuk dan susun atur butang sepenuhnya terpulang kepada anda.

Bagaimana untuk mengemas kini perpustakaan HybridAuth dalam aplikasi PHP saya?

Mengemas kini Hybridauth semudah menjalankan perintah dalam komposer. Ini memastikan bahawa anda sentiasa mempunyai versi terkini dengan semua patch keselamatan dan kemas kini.

Bolehkah saya menggunakan hybridauth dengan kerangka PHP yang lain?

Ya, Hybridauth bukan rangka kerja dan boleh digunakan dengan rangka kerja PHP. Ini menjadikannya pilihan serba boleh untuk pemaju menggunakan rangka kerja PHP yang berbeza.

Bagaimana untuk menguji log masuk sosial Hybridauth dalam persekitaran pembangunan tempatan saya?

Ujian log masuk sosial secara tempatan boleh menjadi rumit kerana rangkaian sosial memerlukan URL panggil balik yang sah. Walau bagaimanapun, anda boleh mendedahkan pelayan tempatan anda ke Internet menggunakan alat seperti NGROK dan menggunakan URL tersebut sebagai URL Panggilan balik.

Bolehkah saya mengesahkan pengguna dengan akaun bukan sosial seperti e-mel dan kata laluan menggunakan hybridauth?

Tidak, Hybridauth direka untuk log masuk sosial. Untuk pengesahan e -mel dan kata laluan tradisional, anda perlu menggunakan perpustakaan PHP yang lain atau membina sistem pengesahan anda sendiri.

Output mengekalkan pemformatan dan penempatan imej asal.

Atas ialah kandungan terperinci Log masuk sosial di PHP dengan hybridauth. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn