发布于 2026-01-06 0 阅读
0

Symfony 7 中的 Google 身份验证

Symfony 7 中的 Google 身份验证

我在使用 Symfony 7 进行 Google 身份验证时遇到了一些问题。

以下是我使其正常运行的步骤。

创建新应用程序

symfony new authdemo --version="7.0.*" --webapp

创建两个控制器,分别使用bin/console make:controller.
RootController和 .DashboardController

将路由从更改RootController/root/
将是我们的公共页面。

/dashboard只有经过身份验证的用户才能访问。

创建 Google 凭据

转到Google Cloud 控制台上的项目,然后选择“API 和服务”。

在凭据选项卡上,您可以选择“创建凭据”,然后选择“OAuth 客户端 ID”。

在下一个屏幕中,选择“Web应用程序”作为应用程序类型。

添加https://localhost:8000/login/check-google到“已授权重定向 URI”并点击“创建”。

您现在可以获得“客户端 ID”和“客户端密钥”。

.env.local在项目根目录下创建一个文件,并按如下方式添加这些值:

GOOGLE_ID=<Paste you Google ID here>
GOOGLE_SECRET=<Paste your Google secret here>
Enter fullscreen mode Exit fullscreen mode

安装并配置 HWIOAuthBundle

您可以在这里找到更详细的说明。

安装软件包:composer require hwi/oauth-bundle并执行配方以添加所需的软件包和路由。

修改config/packages/hwi_oauth.yaml后的样子如下:

hwi_oauth:
    firewall_names: [main]
    resource_owners:
        google:
            type:                google
            client_id:           '%env(GOOGLE_ID)%'
            client_secret:       '%env(GOOGLE_SECRET)%'
            scope:               "email profile"
Enter fullscreen mode Exit fullscreen mode

client_id 和 client_secret 将从您的环境变量中设置。在本例中,即我们在上一步创建的 .env.local 文件。

现在我们需要更新config/packages/security.yaml

  • 添加 hwi_oauth 提供程序
  • 配置主防火墙以使用新的提供商并进行正确的设置
  • 添加访问控制规则以保护您的应用程序
    providers:
        hwi_oauth.user.provider:
            id: hwi_oauth.user.provider

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            oauth:
               resource_owners:
                   google:          "/login/check-google"
               login_path:        /
               use_forward:       false
               failure_path:      /

               oauth_user_provider:
                   service: hwi_oauth.user.provider
               provider: hwi_oauth.user.provider

    access_control:
        - { path: ^/login, roles: PUBLIC_ACCESS }
        - { path: ^/connect, roles: PUBLIC_ACCESS }
        - { path: ^/(.+), roles: ROLE_USER }
        - { path: ^/$, roles: PUBLIC_ACCESS }

Enter fullscreen mode Exit fullscreen mode

按照这些设置,根页面应该是公开的,但/dashboard不应该被访问。如果您尝试访问该页面,/dashboard您将被重定向到其他页面/

让我们在根页面添加登录链接。

请添加以下内容templates/root/index.html.twig

<a href="{{ path('hwi_oauth_service_redirect', {'service': 'google' }) }}">
    <span>Login with Google</span>
</a>
Enter fullscreen mode Exit fullscreen mode

你需要把这条路由添加到某个地方。我已经添加了config/routes/hwi_oauth_routing.yaml

google_login:
    path: /login/check-google
Enter fullscreen mode Exit fullscreen mode

就是这样!

现在你应该可以使用谷歌账号登录了。
登录后,你应该能在 Symfony Profiler 中看到你的名字。你/dashboard现在也应该有权限查看相关信息了。

如果您有任何改进建议,请告诉我。

文章来源:https://dev.to/roeland/google-authentication-with-symfony-7-2b62