numesia/laravel-franceconnect-proxy

Laravel Socialite 的 France connect OAuth2 提供者

2.0.1 2024-09-22 15:12 UTC

This package is auto-updated.

Last update: 2024-09-22 15:14:03 UTC


README

France connect OAuth2 提供者 for Laravel Socialite (代理版本)。

安装

1. COMPOSER

// This assumes that you have composer installed globally
composer require numesia/laravel-franceconnect-proxy

2. 服务提供者

  • 如果已经添加,请从 config\app.php 中的 providers[] 数组中移除 Laravel\Socialite\SocialiteServiceProvider
  • SocialiteProviders\Manager\ServiceProvider::class 添加到 config\app.php 中的 providers[] 数组。

例如

'providers' => [
    // a whole bunch of providers
    // remove 'Laravel\Socialite\SocialiteServiceProvider',
    SocialiteProviders\Manager\ServiceProvider::class, // add
];

注意:如果您想使用 Socialite Facade,您需要安装它

3. 添加事件和监听器

  • 将 SocialiteProviders\Manager\SocialiteWasCalled 事件添加到 <app_name>/Providers/EventServiceProvider 中的 listen[] 数组。

  • 将您的监听器(即来自提供者的)添加到您刚刚创建的 SocialiteProviders\Manager\SocialiteWasCalled[]

  • 您为该提供者添加的监听器是 'SocialiteProviders\LaravelFranceConnect\FranceConnectExtendSocialite@handle',

注意:除非您用您自己的提供者覆盖了它们,否则您不需要为内置的 socialite 提供者添加任何内容。

例如

/**
 * The event handler mappings for the application.
 *
 * @var array
 */
protected $listen = [
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        'Numesia\LaravelFranceConnect\FranceConnectExtendSocialite@handle',
    ],
];

4. 环境变量

将提供者值追加到您的 .env 文件

// other values above
FRANCECONNECT_SANDBOX=true
FRANCECONNECT_KEY=yourkeyfortheservice
FRANCECONNECT_SECRET=yoursecretfortheservice
FRANCECONNECT_REDIRECT_URI=https://example.com/login/franceconnect/callback
FRANCECONNECT_TOKEN_MODEL=App\Models\Fctoken

用法

您现在可以认证用户了!您需要两个路由:一个用于将用户重定向到 OAuth 提供者,另一个用于接收提供者认证后的回调。

Route::get('login/franceconnect', 'Auth\LoginController@redirectToProvider');
Route::get('login/franceconnect/callback', 'Auth\LoginController@handleProviderCallback');

我们将使用 Socialite Facade 访问 Socialite(必须安装 socialite

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Socialite;

class LoginController extends Controller
{
    /**
     * Redirect the user to the FranceConnect authentication page.
     *
     * @return Response
     */
    public function redirectToProvider()
    {
        return Socialite::driver('franceconnect')
            ->scopes(["identite_pivot", "address", "email", "phone", "adresse_postale"])
            ->redirect();
    }

    /**
     * Obtain the user information from FranceConnect.
     *
     * @return Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('franceconnect')->user();
        // Do something with $user
    }
}