在这个数字化的世界中,为您的应用程序提供顺畅和安全的身份验证过程非常重要。这有助于改善用户体验和提高应用程序的整体安全性。
Google身份验证是用户使用其Google帐户登录网站的最受信赖和便利的方式之一。这意味着他们不必记住另一个用户名和密码。
将Google OAuth集成到您的Laravel应用程序中简化了登录过程,鼓励用户参与,并增强了您平台的可信度。在本教程中,我将指导您完成在Laravel应用程序中实现Google身份验证的步骤。我们将从设置Google API凭据开始,配置Laravel的Socialite包。
目录
先决条件
在开始之前,请确保您具备以下先决条件:
-
Laravel 11
-
一个 Google 开发者账户。
-
对 Laravel 和身份验证的基本知识。
-
用于管理包的 Composer
一旦您准备好这些先决条件,就可以开始将 Google 身份验证集成到您的 Laravel 应用中。
在 Laravel 应用中使用 Google Auth 的好处
这种设置有很多好处。其中一些包括:
-
与 Socialite 的简化集成
-
无缝用户身份验证
-
提高安全性
-
可定制的用户流程
-
改善可扩展性
-
强大的生态系统支持
-
更容易的维护
如何设置 Laravel Google 登录
无论您是在进行个人项目还是生产就绪的应用程序,按照这些步骤将帮助您顺利集成 Google 身份验证。让我们开始吧。
步骤 1:设置 Google Cloud 项目
要在您的 Laravel 应用程序中使用 Google 身份验证,首先需要配置一个 Google Cloud 项目。按照以下步骤设置您的项目:
-
访问 Google Cloud 控制台 并使用您的 Google 帐户登录。
-
点击顶部导航栏中的 “选择项目” 下拉菜单。在弹出窗口中,点击 “新建项目” 创建新项目并提供所需的详细信息。然后点击 创建项目。
-
创建项目后,打开控制台左侧菜单,选择API 和服务 > 凭据。
-
在凭据页面,点击创建凭据 > OAuth 客户端 ID。
-
如果这是您第一次创建客户端 ID,系统会要求您配置用户同意屏幕。您可以通过点击 配置 用户同意屏幕 来配置您的用户同意屏幕。如果您已经配置了用户同意屏幕,可以跳过此步骤。
-
如果您的应用程序是供大众使用,请选择 外部,如果仅限于您的 Google Workspace 组织内的用户,请选择 内部。
-
填写所需的详细信息,例如 应用名称、用户支持电子邮件 和任何品牌信息。点击 保存并继续。
-
配置完同意屏幕后,返回 凭据 页面并再次选择 OAuth 客户端 ID。
-
选择 应用类型 为 Web 应用程序,并为客户端凭据提供一个名称(例如,Laravel 社交登录)。
-
在 授权重定向 URI 下,添加您应用程序的回调 URL:
-
示例:
http://your-app-url.com/callback/google
-
如果您在本地测试,请使用: http://127.0.0.1:8000/api/auth/google/callback
-
-
点击 创建,谷歌将为您的项目生成一个 客户端 ID 和 客户端密钥。请保存这些凭据,因为它们将在接下来的步骤中需要。
步骤 2:创建一个新的 Laravel 项目并安装 Laravel Socialite 包
如果您还没有准备好,可以使用以下命令创建一个新的 Laravel 项目:
composer create-project --prefer-dist laravel/laravel social-auth-example
要将 Google 认证集成到 Laravel 项目中,我们将使用 Laravel Socialite。Socialite 是一个第一方 Laravel 包,简化了与 Google、Facebook、Twitter 等流行服务的 OAuth 认证。
要安装 Socialite,请在 Laravel 项目的根目录中打开终端并运行以下命令:
composer require laravel/socialite
步骤 3:配置环境变量
在此步骤中,我们将配置我们的 Laravel 应用程序以使用在步骤 1 中收集的 Google OAuth 凭据。
找到项目根目录中的 .env
文件,并添加以下环境变量:
GOOGLE_CLIENT_ID=your-client-id
GOOGLE_CLIENT_SECRET=your-client-secret
GOOGLE_REDIRECT_URL=http://your-domain.com/auth/google/callback
请继续替换所有占位符为秘密。
让我们逐一了解每个环境变量:
-
GOOGLE_CLIENT_ID
:由 Google 提供的应用程序唯一标识符。 -
GOOGLE_CLIENT_SECRET
:您的应用程序用于与Google API进行安全身份验证的私钥。 -
GOOGLE_REDIRECT_URL
:用户登录后Google重定向用户的URL。这应与您在创建凭据时指定的重定向URI相匹配。
第4步:更新配置文件
为了使Laravel Socialite能够使用Google OAuth凭据,我们需要在config/services.php
文件中配置提供程序详细信息。
在services.php
文件中,添加以下用于Google提供程序的配置:
'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'), // 您的Google客户端ID
'client_secret' => env('GOOGLE_CLIENT_SECRET'), // 您的Google客户端密钥
'redirect' => env('GOOGLE_REDIRECT_URL'), // 您的Google重定向URL
]
第5步:为身份验证创建控制器和路由。
在此步骤中,我们将创建一个控制器来处理Google OAuth重定向和回调,并设置必要的路由以触发这些方法。
运行以下Artisan命令生成GoogleAuthController
控制器:
php artisan make:controller GoogleAuthController
这将在app/Http/Controllers/GoogleAuthController.php
处创建一个控制器。
将新创建的GoogleAuthController.php
文件的内容替换为以下代码:
<?php
namespace App\\Http\\Controllers;
use App\\Http\\Controllers\\Controller;
use App\\Models\\User;
use Laravel\\Socialite\\Facades\\Socialite;
use Illuminate\\Support\\Facades\\Auth;
use Illuminate\\Support\\Str;
use Throwable;
class GoogleAuthController extends Controller
{
/**
* 将用户重定向到Google的OAuth页面。
*/
public function redirect()
{
return Socialite::driver('google')->redirect();
}
/**
* 处理来自Google的回调。
*/
public function callback()
{
try {
// 从Google获取用户信息
$user = Socialite::driver('google')->user();
} catch (Throwable $e) {
return redirect('/')->with('error', 'Google authentication failed.');
}
// 检查用户是否已存在于数据库中
$existingUser = User::where('email', $user->email)->first();
if ($existingUser) {
// 如果用户已存在,则将其登录
Auth::login($existingUser);
} else {
// 否则,创建新用户并登录
$newUser = User::updateOrCreate([
'email' => $user->email
], [
'name' => $user->name,
'password' => bcrypt(Str::random(16)), // 设置一个随机密码
'email_verified_at' => now()
]);
Auth::login($newUser);
}
// 将用户重定向到仪表板或其他安全页面
return redirect('/dashboard');
}
}
该控制器包含两个函数:
-
Redirect:将用户重定向到Google的OAuth页面。
-
Callback:处理来自Google的回调并将用户重定向到仪表板或其他安全页面。
让我们在routes/web.php
文件中定义redirect
和callback
的路由:
use App\\Http\\Controllers\\GoogleAuthController;
// 路由到Google的OAuth页面
Route::get('/auth/google/redirect', [GoogleAuthController::class, 'redirect'])->name('auth.google.redirect');
// 路由处理来自Google的回调
Route::get('/auth/google/callback', [GoogleAuthController::class, 'callback'])->name('auth.google.callback');
第6步:在您的项目中测试Laravel Google身份验证。
我们已经设置了Google身份验证,现在是时候测试它,确保它能够无缝运行。在这一步中,我们将使用一个登录按钮,将用户重定向到Google的身份验证页面,并在成功登录后将他们返回到受保护的路由。
首先,我们将添加以下按钮,让用户选择使用Google登录:
<a href="{{ route('auth.google.redirect') }}" class="btn bg-blue-100 p-3 shadow-sm border rounded-md text-blue-900">
Login with Google
</a>
为了测试目的,我已定义了一个受保护的路由和一个dashboard
。这个路由只对经过身份验证的用户可访问。登录后,我们将重定向用户到这个页面。让我们在web.php
中定义这个路由:
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware('auth')->name('dashboard');
接下来,在resources/views/dashboard.blade.php
创建一个blade视图文件用于仪表板。以下是仪表板的内容:
<html>
<head>
<title>Dashboard</title>
</head>
<body>
<h1>Dashboard</h1>
<p>Welcome to the dashboard, {{ auth()->user()->name }}!</p>
</body>
</html>
在这里,我们使用auth()->user()
助手来显示已登录用户的姓名,这是从他们用于登录的Google帐户中提取的。
现在,让我们尝试登录。
这是登录页面:
点击按钮将重定向您到Google的同意界面:
点击继续,您应该已登录到应用程序。您将被重定向到一个类似下面的屏幕。您可以看到带有用户名称的欢迎消息。
就是这样!您已成功在您的Laravel项目中实现和测试了Google身份验证。现在您的用户可以使用他们的Google帐户登录,增强了安全性和便利性。
要查看完整实现,请在GitHub上找到此项目的完整源代码:Laravel的Google登录集成 – GitHub代码库
结论
您已经在Laravel应用程序中设置了Google身份验证,使用了Socialite!您可以通过向config/services.php
文件添加额外的配置,来扩展此方法以包括其他OAuth提供者,如Facebook、Twitter或GitHub。
Google OAuth集成是现代Web应用程序的常见功能,而Laravel Socialite使其易于实现。
如果您需要更多的社交登录选项,如GitHub、Twitter和Facebook,则可以考虑使用现成的Laravel SaaS脚手架。
大多数预构建的Laravel SaaS脚手架都提供与流行平台(如Google、GitHub、Facebook和Twitter)的无缝集成。例如,有一些付费和开源资源,如:
-
Laravel入门套件(付费)
-
基于Tailwind CSS
-
带有一键魔术链接设置
-
支持各种身份验证方法,包括传统的电子邮件/密码登录
-
双因素认证
-
-
SaaS样板(开源)
-
单数据库多租户
-
开发者面板
-
管理个人访问令牌
-
-
Laranuxt(开源)
-
Nuxt UI是NuxtJS团队构建的一组组件,由Tailwind CSS驱动
-
身份验证库,用于协助用户会话和登录/注销
-
示例身份验证中间件
-
-
Laravel Vue 脚手架(开源)
-
使用 Laravel Echo 和 Pusher 实现的 WebSockets。
-
使用 Workbox 实现更好的 PWA 开发。
-
Laravel GraphQL
-
使用这些 Laravel SaaS 脚手架之一可以加快您的工作流程,因为您无需从头开始设置所有内容。
特别感谢经验丰富的Laravel开发者和爱好者Deep Kumbhare,他在准备本文时给予了我帮助。
希望这篇文章对您在Laravel中设置Google登录有所帮助。
Source:
https://www.freecodecamp.org/news/how-to-set-up-google-auth-in-laravel-apps/