如何在 Laravel 中进行单点登录?

问题描述 投票:0回答:1

我是 Laravel 的新手。我有两个在同一服务器上运行的 Laravel 项目,

app-1.example.com
app-2.example.com
;每个都有不同的功能和数据库。但我希望第二个项目能够使用第一个项目的凭据登录系统;如何才能做到这一点?有没有一个包可以做到这一点?

我想尝试使用 Laravel Passport,但在我读过的几个教程中使用一个数据库会更容易。但就我而言,我对每个数据库使用两个 Laravel 项目。

laravel single-sign-on laravel-passport
1个回答
0
投票

单点登录 (SSO) 是一种允许用户使用一组登录凭据访问多个应用程序的机制。 Laravel 是一种流行的 PHP Web 应用程序框架,通过各种包和库提供对实现 SSO 的支持。下面,我将提供如何使用名为“laravel/socialite”的通用包在 Laravel 中实现 SSO 的基本概述。

请注意,此处提供的步骤只是一般指南,您应始终参阅您所使用的软件包的官方文档,以获取最准确和最新的信息。

先决条件:

  1. Laravel 应用程序。
  2. Composer 安装在您的计算机上。

步骤:

1.安装 Laravel Socialite:

composer require laravel/socialite

2.配置 Laravel Socialite:

将社交名流服务提供商和别名添加到您的

config/app.php
文件中:

'providers' => [
    // Other providers...
    Laravel\Socialite\SocialiteServiceProvider::class,
],

'aliases' => [
    // Other aliases...
    'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],

3.配置服务:

在您的

config/services.php
文件中为所需的 OAuth 提供商添加以下配置。例如,对于 GitHub:

'github' => [
    'client_id' => env('GITHUB_CLIENT_ID'),
    'client_secret' => env('GITHUB_CLIENT_SECRET'),
    'redirect' => env('GITHUB_REDIRECT_URI'),
],

确保在您的

.env
文件中设置相应的环境变量。

4.实施路线和控制器:

创建一个控制器来处理 SSO 逻辑。例如:

php artisan make:controller SsoController

SsoController.php

namespace App\Http\Controllers;

use Socialite;

class SsoController extends Controller
{
    public function redirectToProvider()
    {
        return Socialite::driver('github')->redirect();
    }

    public function handleProviderCallback()
    {
        $user = Socialite::driver('github')->user();

        // Handle user data and login logic here

        return redirect()->route('home');
    }
}

web.php
中添加路线:

use App\Http\Controllers\SsoController;

Route::get('login/github', [SsoController::class, 'redirectToProvider'])->name('github.login');
Route::get('login/github/callback', [SsoController::class, 'handleProviderCallback']);

5.创建视图:

在您的视图中创建登录按钮:

<!-- Example for GitHub login -->
<a href="{{ route('github.login') }}">Login with GitHub</a>

6.处理用户数据:

在控制器的

handleProviderCallback
方法中,您从 OAuth 提供者接收用户数据。根据应用程序的要求处理这些数据,例如创建用户帐户或登录用户。

7.保护路线:

如果您想保护某些路由仅在 SSO 后才能访问,您可以使用 Laravel 的中间件。例如,在您的路线文件中:

Route::middleware(['auth'])->group(function () {
    // Your protected routes here
});

这些是一般步骤,您应该参考 Laravel Socialite 的官方文档以及您正在使用的 OAuth 提供程序来了解任何其他配置或功能。

© www.soinside.com 2019 - 2024. All rights reserved.