我是 Laravel 的新手。我有两个在同一服务器上运行的 Laravel 项目,
app-1.example.com
和 app-2.example.com
;每个都有不同的功能和数据库。但我希望第二个项目能够使用第一个项目的凭据登录系统;如何才能做到这一点?有没有一个包可以做到这一点?
我想尝试使用 Laravel Passport,但在我读过的几个教程中使用一个数据库会更容易。但就我而言,我对每个数据库使用两个 Laravel 项目。
单点登录 (SSO) 是一种允许用户使用一组登录凭据访问多个应用程序的机制。 Laravel 是一种流行的 PHP Web 应用程序框架,通过各种包和库提供对实现 SSO 的支持。下面,我将提供如何使用名为“laravel/socialite”的通用包在 Laravel 中实现 SSO 的基本概述。
请注意,此处提供的步骤只是一般指南,您应始终参阅您所使用的软件包的官方文档,以获取最准确和最新的信息。
composer require laravel/socialite
将社交名流服务提供商和别名添加到您的
config/app.php
文件中:
'providers' => [
// Other providers...
Laravel\Socialite\SocialiteServiceProvider::class,
],
'aliases' => [
// Other aliases...
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],
在您的
config/services.php
文件中为所需的 OAuth 提供商添加以下配置。例如,对于 GitHub:
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('GITHUB_REDIRECT_URI'),
],
确保在您的
.env
文件中设置相应的环境变量。
创建一个控制器来处理 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']);
在您的视图中创建登录按钮:
<!-- Example for GitHub login -->
<a href="{{ route('github.login') }}">Login with GitHub</a>
在控制器的
handleProviderCallback
方法中,您从 OAuth 提供者接收用户数据。根据应用程序的要求处理这些数据,例如创建用户帐户或登录用户。
如果您想保护某些路由仅在 SSO 后才能访问,您可以使用 Laravel 的中间件。例如,在您的路线文件中:
Route::middleware(['auth'])->group(function () {
// Your protected routes here
});
这些是一般步骤,您应该参考 Laravel Socialite 的官方文档以及您正在使用的 OAuth 提供程序来了解任何其他配置或功能。