Rumah > pembangunan bahagian belakang > tutorial php > Perisian tengah Zend Framework: Menambah sokongan log masuk OAuth dan OpenID pada aplikasi

Perisian tengah Zend Framework: Menambah sokongan log masuk OAuth dan OpenID pada aplikasi

WBOY
Lepaskan: 2023-07-28 13:40:01
asal
929 orang telah melayarinya

Zend Framework Middleware: Tambahkan sokongan log masuk OAuth dan OpenID pada aplikasi

Dalam aplikasi Internet hari ini, pengesahan pengguna ialah ciri kritikal. Untuk memberikan pengalaman dan keselamatan pengguna yang lebih baik, banyak aplikasi memilih untuk menyepadukan perkhidmatan log masuk pihak ketiga, seperti OAuth dan OpenID. Dalam Rangka Kerja Zend, kami boleh menambah sokongan log masuk OAuth dan OpenID dengan mudah kepada aplikasi melalui perisian tengah.

Pertama, kita perlu memasang modul OAuth dan OpenID bagi Zend Framework. Mereka boleh dipasang melalui Komposer:

composer require zendframework/zend-oauth
composer require zendframework/zend-openid
Salin selepas log masuk

Selepas melengkapkan pemasangan, kami boleh mula menulis perisian tengah untuk mengendalikan pengesahan pengguna.

Pertama, kami mencipta kelas middleware yang dipanggil AuthMiddleware:

use PsrHttpMessageRequestInterface;
use PsrHttpMessageResponseInterface;
use ZendDiactorosResponseRedirectResponse;
use ZendStratigilityMiddlewareInterface;
use ZendAuthenticationAuthenticationService;

class AuthMiddleware implements MiddlewareInterface
{
    private $authService;
    
    public function __construct(AuthenticationService $authService)
    {
        $this->authService = $authService;
    }
    
    public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next = null) : ResponseInterface
    {
        // 检查用户是否已认证
        if ($this->authService->hasIdentity()) {
            // 用户已认证,继续请求处理
            return $next($request, $response);
        }
        
        // 用户未认证,重定向到登录页面
        return new RedirectResponse('/login');
    }
}
Salin selepas log masuk

Dalam kelas middleware ini, kami menggunakan komponen AuthenticationService Rangka Kerja Zend untuk menyemak sama ada pengguna telah disahkan. Jika pengguna telah disahkan, kami meneruskan pemprosesan permintaan jika tidak, lompat ke halaman log masuk.

Langkah seterusnya, kami mencipta kelas middleware yang dipanggil LoginMiddleware untuk mengendalikan logik log masuk pengguna:

use PsrHttpMessageRequestInterface;
use PsrHttpMessageResponseInterface;
use ZendDiactorosResponseHtmlResponse;
use ZendStratigilityMiddlewareInterface;
use ZendAuthenticationAuthenticationService;
use ZendAuthenticationAdapterOpenId as OpenIdAdapter;

class LoginMiddleware implements MiddlewareInterface
{
    private $authService;
    
    public function __construct(AuthenticationService $authService)
    {
        $this->authService = $authService;
    }
    
    public function __invoke(RequestInterface $request, ResponseInterface $response, callable $next = null) : ResponseInterface
    {
        if ($request->getMethod() === 'POST') {
            // 处理登录表单提交
            $identity = $request->getParsedBody()['identity'];
            $credential = $request->getParsedBody()['credential'];
            
            // 使用OpenID适配器进行认证
            $adapter = new OpenIdAdapter();
            $adapter->setIdentity($identity);
            $adapter->setCredential($credential);
            
            // 进行认证
            $result = $this->authService->authenticate($adapter);
            
            if ($result->isValid()) {
                // 认证成功,存储用户身份信息
                $this->authService->getStorage()->write($result->getIdentity());
                
                // 记录用户登录成功的日志
                // ...
                
                // 重定向到首页
                return new RedirectResponse('/');
            }
            
            // 认证失败,返回登录页面并显示错误信息
            return new HtmlResponse($this->renderLoginForm(['error' => '用户名或密码错误']));
        }
        
        // 显示登录页面
        return new HtmlResponse($this->renderLoginForm());
    }
    
    private function renderLoginForm(array $params = []) : string
    {
        // 渲染登录表单模板,可使用Twig等模板引擎
        // ...
    }
}
Salin selepas log masuk

Dalam kelas middleware ini, kami menggunakan OpenIdAdapter Zend Framework untuk pengesahan pengguna. Selepas pengesahan berjaya, kami menyimpan maklumat identiti pengguna dan boleh melakukan beberapa operasi tambahan, seperti merekodkan log log masuk pengguna yang berjaya.

Akhir sekali, kami menambah middleware ini pada aplikasi Zend Framework:

use ZendStratigilityMiddlewarePipe;
use ZendAuthenticationAuthenticationService;
use ZendDiactorosServerRequestFactory;

// 创建Zend Framework应用程序实例
$app = new MiddlewarePipe();

// 创建AuthenticationService实例
$authService = new AuthenticationService();

// 添加OAuth和OpenID登录中间件
$app->pipe(new AuthMiddleware($authService));
$app->pipe(new LoginMiddleware($authService));

// 处理请求
$response = $app(ServerRequestFactory::fromGlobals(), new Response());

// 发送响应
$responseEmitter = new ResponseSapiEmitter();
$responseEmitter->emit($response);
Salin selepas log masuk

Dalam kod di atas, kami mencipta contoh MiddlewarePipe dan menambah perisian tengah AuthMiddleware dan LoginMiddleware. Kami kemudian menggunakan ServerRequestFactory Zend Framework untuk mencipta contoh permintaan dan menjalankan aplikasi dengan memproses permintaan dan menghantar respons.

Dengan langkah di atas, kami berjaya menambah sokongan log masuk OAuth dan OpenID pada aplikasi. Pengguna kini boleh menggunakan perkhidmatan log masuk pihak ketiga untuk mengesahkan dan memperoleh pengalaman dan keselamatan pengguna yang lebih baik.

Contoh di atas hanyalah demonstrasi mudah, dan mungkin terdapat lebih banyak operasi penyesuaian dan penyepaduan dalam penggunaan sebenar. Walau bagaimanapun, dengan fleksibiliti dan kemudahan penggunaan middleware Zend Framework, kami boleh mencapai operasi ini dengan mudah dan menambah pelbagai ciri pada aplikasi.

Middleware ialah salah satu ciri berkuasa dalam Rangka Kerja Zend, yang menyediakan cara ringkas dan boleh diperluaskan untuk mengendalikan permintaan dan respons HTTP. Sama ada ia adalah pengesahan, kebenaran, pengelogan atau fungsi lain, perisian tengah boleh membantu kami mengendalikannya dengan cepat dan fleksibel. Jika aplikasi anda memerlukan pengesahan pengguna, cuba gunakan middleware untuk menambah sokongan log masuk OAuth dan OpenID!

Atas ialah kandungan terperinci Perisian tengah Zend Framework: Menambah sokongan log masuk OAuth dan OpenID pada aplikasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan