numesia/laravel-franceconnect-proxy
Laravel Socialite 的 France connect OAuth2 提供者
2.0.1
2024-09-22 15:12 UTC
Requires
- php: ^5.6 || ^7.0 || ^8.0
- firebase/php-jwt: ^6.4
- socialiteproviders/manager: ~2.0 || ~3.0 || ~4.0
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
}
}