在这个数字化的世界中,为您的应用程序提供顺畅和安全的身份验证过程非常重要。这有助于改善用户体验和提高应用程序的整体安全性。

Google身份验证是用户使用其Google帐户登录网站的最受信赖和便利的方式之一。这意味着他们不必记住另一个用户名和密码。

将Google OAuth集成到您的Laravel应用程序中简化了登录过程,鼓励用户参与,并增强了您平台的可信度。在本教程中,我将指导您完成在Laravel应用程序中实现Google身份验证的步骤。我们将从设置Google API凭据开始,配置Laravel的Socialite包。

目录

先决条件

在开始之前,请确保您具备以下先决条件:

  1. Laravel 11

  2. 一个 Google 开发者账户。

  3. 对 Laravel 和身份验证的基本知识。

  4. 用于管理包的 Composer

一旦您准备好这些先决条件,就可以开始将 Google 身份验证集成到您的 Laravel 应用中。

在 Laravel 应用中使用 Google Auth 的好处

这种设置有很多好处。其中一些包括:

  • 与 Socialite 的简化集成

  • 无缝用户身份验证

  • 提高安全性

  • 可定制的用户流程

  • 改善可扩展性

  • 强大的生态系统支持

  • 更容易的维护

如何设置 Laravel Google 登录

无论您是在进行个人项目还是生产就绪的应用程序,按照这些步骤将帮助您顺利集成 Google 身份验证。让我们开始吧。

步骤 1:设置 Google Cloud 项目

要在您的 Laravel 应用程序中使用 Google 身份验证,首先需要配置一个 Google Cloud 项目。按照以下步骤设置您的项目:

  1. 访问 Google Cloud 控制台 并使用您的 Google 帐户登录。

  2. 点击顶部导航栏中的 “选择项目” 下拉菜单。在弹出窗口中,点击 “新建项目” 创建新项目并提供所需的详细信息。然后点击 创建项目

  3. 创建项目后,打开控制台左侧菜单,选择API 和服务 > 凭据

  4. 在凭据页面,点击创建凭据 > OAuth 客户端 ID

  5. 如果这是您第一次创建客户端 ID,系统会要求您配置用户同意屏幕。您可以通过点击 配置 用户同意屏幕 来配置您的用户同意屏幕。如果您已经配置了用户同意屏幕,可以跳过此步骤。

    • 如果您的应用程序是供大众使用,请选择 外部,如果仅限于您的 Google Workspace 组织内的用户,请选择 内部

    • 填写所需的详细信息,例如 应用名称用户支持电子邮件 和任何品牌信息。点击 保存并继续

配置完同意屏幕后,返回 凭据 页面并再次选择 OAuth 客户端 ID

  1. 选择 应用类型Web 应用程序,并为客户端凭据提供一个名称(例如,Laravel 社交登录)。

  2. 授权重定向 URI 下,添加您应用程序的回调 URL:

  3. 点击 创建,谷歌将为您的项目生成一个 客户端 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');
    }
}

该控制器包含两个函数:

  1. Redirect:将用户重定向到Google的OAuth页面。

  2. Callback:处理来自Google的回调并将用户重定向到仪表板或其他安全页面。

让我们在routes/web.php文件中定义redirectcallback的路由:

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登录有所帮助。