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>
安装并配置 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"
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 }
按照这些设置,根页面应该是公开的,但/dashboard不应该被访问。如果您尝试访问该页面,/dashboard您将被重定向到其他页面/。
让我们在根页面添加登录链接。
请添加以下内容templates/root/index.html.twig:
<a href="{{ path('hwi_oauth_service_redirect', {'service': 'google' }) }}">
<span>Login with Google</span>
</a>
你需要把这条路由添加到某个地方。我已经添加了config/routes/hwi_oauth_routing.yaml:
google_login:
path: /login/check-google
就是这样!
现在你应该可以使用谷歌账号登录了。
登录后,你应该能在 Symfony Profiler 中看到你的名字。你/dashboard现在也应该有权限查看相关信息了。
如果您有任何改进建议,请告诉我。
文章来源:https://dev.to/roeland/google-authentication-with-symfony-7-2b62
