digitive/vipps-socialite-provider

Laravel Socialite 的 Vipps OAuth2 提供程序

2.0.1 2022-08-04 10:59 UTC

This package is auto-updated.

Last update: 2024-09-04 15:14:51 UTC


README

1. 安装

// This assumes that you have composer installed globally
composer require digitive/vipps-socialite-provider

2. 服务提供者

添加到 app.php

'providers' => [
    Laravel\Socialite\SocialiteServiceProvider::class,
    \SocialiteProviders\Manager\ServiceProvider::class,
];

3. 事件监听器

  • SocialiteProviders\Manager\SocialiteWasCalled 事件添加到你的 app/Providers/EventServiceProvider 中的 listen[] 数组。

示例

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

4. 配置设置

您需要将 vipps 添加到服务配置文件中,以便在生产环境中使用缓存后的配置文件(Laravel 命令 artisan config:cache)时,所有配置仍然可用。

添加到 config/services.php

'vipps' => [
    'client_id' => env('VIPPS_CLIENT_ID'),
    'client_secret' => env('VIPPS_CLIENT_SECRET'),
    'redirect' => env('VIPPS_REDIRECT_URI'),
],

请记住在 Vipps 门户 中将 redirect_uri 列为白名单。客户端 ID 和密钥也可在 Vipps 门户 中找到。

5. 使用方法

  • Laravel 文档关于配置
  • 需要 Guzzle 版本 7 或更高版本
  • 现在您应该能够像平时使用 Socialite 一样使用它(假设您已安装了 facade)

要启动 Vipps 登录,请将以下代码添加到您的控制器中

return Socialite::driver('vipps')->redirect();

现在您已在回调函数中从 Vipps 获取了用户令牌。现在我们需要使用用户令牌来获取已验证用户的电话号码。

$user = Socialite::driver('vipps')->stateless()->user();

VippsAuthController 的示例

<?php
 
 namespace App\Http\Controllers\Api;
 
 use App\Http\Controllers\Controller;
 use Illuminate\Http\Request;
 use Laravel\Socialite\Facades\Socialite;
 
 class VippsAuthController extends Controller
 {
     // User clicked Login in with Vipps button
     public function index(Request $request)
     {
         return Socialite::driver('vipps')->redirect();
     }
 
     // Vipps callback function (VIPPS_REDIRECT_URL in .env)
     public function handleCallback()
     {
         $user = Socialite::driver('vipps')->stateless()->user();
 
         if (!$user) {
             //Handle errors for missing user
         }

         //Authenticate user
     }
}

如果您需要多个重定向 URL,您可以在控制器中定义一个重定向 URL。

指定重定向 URL 的示例

Socialite::driver('vipps')->redirectUrl($redirectUrl)->redirect();

对于作用域也是如此

指定作用域的示例

Socialite::diver('vipps')->scopes(['openid', 'api_version_2', 'phoneNumber', 'name'])->redirect();

Vipps 指南

  • 当使用 Vipps 登录时,您需要使用 Vipps 提供的登录按钮 SVG。有关更多信息,请参阅 Vipps 设计指南

许可

MIT © Digitive AS