Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan rangka kerja Hyperf untuk log masuk pihak ketiga

Cara menggunakan rangka kerja Hyperf untuk log masuk pihak ketiga

PHPz
PHPzasal
2023-10-25 09:16:471124semak imbas

Cara menggunakan rangka kerja Hyperf untuk log masuk pihak ketiga

Cara menggunakan rangka kerja Hyperf untuk log masuk pihak ketiga

Pengenalan:
Dengan perkembangan Internet, log masuk pihak ketiga telah menjadi ciri standard bagi banyak tapak web dan aplikasi. Melalui log masuk pihak ketiga, pengguna boleh menggunakan maklumat akaun sedia ada mereka pada platform pihak ketiga untuk log masuk ke tapak web atau aplikasi lain, mengelakkan proses pendaftaran yang menyusahkan dan meningkatkan pengalaman pengguna dengan ketara. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Hyperf untuk melaksanakan fungsi log masuk pihak ketiga, dengan contoh kod khusus.

1. Persediaan
Sebelum kami mula melaksanakan log masuk pihak ketiga, kami perlu menyediakan beberapa kerja yang diperlukan:

  1. Daftar di tapak web atau aplikasi yang memerlukan log masuk pihak ketiga dan memohon akaun pembangun yang sepadan, seperti QQ Internet , platform terbuka WeChat, dsb. Dapatkan maklumat yang diperlukan seperti AppID yang sepadan, AppSecret.
  2. Pasang rangka kerja Hyperf dan buat projek baharu.

2. Pasang pakej pergantungan
Jalankan arahan berikut dalam direktori akar projek untuk memasang pakej sambungan log masuk pihak ketiga yang disediakan oleh komuniti Hyperf.

composer require hyperf/socialite

3 Tambah maklumat konfigurasi
Tambah fail konfigurasi socialite.php dalam direktori config/autoload/ direktori akar projek Hyperf dan tambah kandungan berikut: config/autoload/ 目录下添加 socialite.php 配置文件,并添加以下内容:

<?php

return [
    'default' => [
        'wechat' => [
            'client_id' => env('WECHAT_CLIENT_ID', ''),
            'client_secret' => env('WECHAT_CLIENT_SECRET', ''),
            'redirect' => env('WECHAT_REDIRECT', ''),
        ],
        'qq' => [
            'client_id' => env('QQ_CLIENT_ID', ''),
            'client_secret' => env('QQ_CLIENT_SECRET', ''),
            'redirect' => env('QQ_REDIRECT', ''),
        ],
        // 更多第三方平台的配置信息...
    ],
];

上述配置文件中的 WECHAT_CLIENT_IDWECHAT_CLIENT_SECRETWECHAT_REDIRECTQQ_CLIENT_IDQQ_CLIENT_SECRETQQ_REDIRECT 等字段需要替换为开发者在对应平台上申请的信息。

四、创建控制器
在Hyperf项目中创建一个控制器,例如 LoginController,并添加以下方法:

<?php

declare(strict_types=1);

namespace AppController;

use HyperfHttpServerAnnotationController;
use HyperfHttpServerAnnotationRequestMapping;
use PsrHttpMessageResponseInterface;

/**
 * @Controller
 */
class LoginController
{
    /**
     * @RequestMapping(path="/login/{platform}", methods="GET")
     */
    public function redirectToThirdParty(string $platform): ResponseInterface
    {
        return context()
            ->getContainer()
            ->get(HyperfSocialiteSocialiteManager::class)
            ->driver($platform)
            ->redirect();
    }

    /**
     * @RequestMapping(path="/login/{platform}/callback", methods="GET")
     */
    public function handleThirdPartyCallback(string $platform): ResponseInterface
    {
        $user = context()
            ->getContainer()
            ->get(HyperfSocialiteSocialiteManager::class)
            ->driver($platform)
            ->user();
        
        // 在此处处理用户登录逻辑,例如创建用户、更新用户信息等

        return $this->generateResponse();
    }

    private function generateResponse(): ResponseInterface
    {
        // 生成登录成功后的响应

        return $response;
    }
}

五、使用第三方登录
在页面中添加第三方登录的入口,例如:

<a href="/login/wechat">使用微信登录</a>
<a href="/login/qq">使用QQ登录</a>

当用户点击对应的链接后,会跳转到第三方平台的登录授权页面。

六、处理回调数据
当用户在第三方平台上完成登录授权后,会跳转回我们的应用程序,并调用回调方法 handleThirdPartyCallback。在该方法中,我们可以通过 user() 方法获取到用户在第三方平台上的基本信息,例如头像、昵称等。在此处,我们可以根据第三方平台返回的信息,判断用户是否已经在我们的应用程序中注册,如果没有,则可以在此处完成用户的自动注册。

七、完善登录逻辑
在登陆成功后,我们可以根据业务需求,生成用户的登录状态并返回一个响应给用户,例如生成 JWT Token,设置 Cookie 等。

八、总结
通过使用Hyperf框架和社区提供的 hyperf/socialiterrreee

WECHAT_CLIENT_ID, WECHAT_CLIENT_SECRET, WECHAT_REDIRECT, QQ_CLIENT_ID, QQ_CLIENT_SECRET, dalam fail konfigurasi di atas Medan seperti QQ_REDIRECT perlu digantikan dengan maklumat yang digunakan oleh pembangun pada platform yang sepadan. 🎜🎜4 Buat pengawal🎜Buat pengawal dalam projek Hyperf, seperti LoginController, dan tambah kaedah berikut: 🎜rrreee🎜5. Gunakan log masuk pihak ketiga🎜Tambah log masuk pihak ketiga Halaman Masuk, contohnya: 🎜rrreee🎜Apabila pengguna mengklik pautan yang sepadan, ia akan melompat ke halaman kebenaran log masuk platform pihak ketiga. 🎜🎜6. Memproses data panggil balik🎜Apabila pengguna melengkapkan kebenaran log masuk pada platform pihak ketiga, ia akan kembali ke aplikasi kami dan memanggil kaedah panggil balik handleThirdPartyCallback. Dalam kaedah ini, kita boleh mendapatkan maklumat asas pengguna pada platform pihak ketiga melalui kaedah user(), seperti avatar, nama panggilan, dsb. Di sini, kami boleh menentukan sama ada pengguna telah mendaftar dalam aplikasi kami berdasarkan maklumat yang dikembalikan oleh platform pihak ketiga Jika tidak, pendaftaran automatik pengguna boleh diselesaikan di sini. 🎜🎜7. Tingkatkan logik log masuk🎜Selepas log masuk berjaya, kami boleh menjana status log masuk pengguna dan mengembalikan respons kepada pengguna mengikut keperluan perniagaan, seperti menjana Token JWT, menetapkan Cookie, dsb. 🎜🎜8. Ringkasan🎜Dengan menggunakan rangka kerja Hyperf dan pakej sambungan hyperf/socialite yang disediakan oleh komuniti, kami boleh melaksanakan fungsi log masuk pihak ketiga dengan pantas. Dalam artikel ini, kami melaksanakan fungsi log masuk pengguna melalui WeChat dan QQ dengan memperkenalkan pakej pergantungan, menambah maklumat konfigurasi, mencipta pengawal dan langkah lain. Sudah tentu, dalam projek sebenar, kami juga boleh menambah lebih banyak kaedah log masuk pihak ketiga mengikut keperluan, seperti Weibo, GitHub, dll. Saya harap artikel ini dapat memberi anda beberapa rujukan untuk melaksanakan fungsi log masuk pihak ketiga dalam Hyperf. 🎜

Atas ialah kandungan terperinci Cara menggunakan rangka kerja Hyperf untuk log masuk pihak ketiga. 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