无FOSUserBundle集成HWIOAuthBundle谷歌登录遇404,求路由列表
解决HWIOAuthBundle谷歌登录404及Twig可用路由查看问题
我来帮你搞定这个集成问题,先从你关心的Twig中可用的HWIOAuthBundle路由查看方法说起,再一步步排查404错误的原因:
一、查看HWIOAuthBundle的可用路由路径
要找到Twig里能用的路由,最直接的方式就是用Symfony的控制台命令:
php bin/console debug:router
执行后会列出所有已注册的路由,你直接搜索带hwi_oauth前缀的条目就行。通常会看到这些核心路由:
hwi_oauth_connect:展示所有OAuth登录选项的页面(如果需要的话)hwi_oauth_service_redirect:通用的重定向路由,需要传入service参数指定服务商(比如google)hwi_oauth_service_redirect_google:针对谷歌的专属重定向路由(如果你的配置生成了命名路由)hwi_oauth_service_login_google:谷歌登录的回调处理路由
在Twig模板里,你可以用path()函数生成对应的链接,比如:
- 用通用路由:
{{ path('hwi_oauth_service_redirect', {'service': 'google'}) }} - 用专属命名路由:
{{ path('hwi_oauth_redirect_google') }}
二、排查“xxxx/connect/google”404的原因
结合你提到的几个文件,逐一检查:
1. 路由配置(routing.yml)
首先要确保你已经导入了HWIOAuthBundle的路由,否则它的所有路由都不会生效:
# routing.yml hwi_oauth: resource: "@HWIOAuthBundle/Resources/config/routing.xml" # 还要记得配置谷歌登录的回调路径 login_check_google: path: /login/check-google
2. HWIOAuth配置(config.yml)
确认你正确配置了谷歌的OAuth服务,并且firewall_name和你security.yml里的防火墙名称一致:
# config.yml hwi_oauth: firewall_name: main # 对应security.yml里的防火墙名称 resource_owners: google: type: google client_id: 你的谷歌客户端ID client_secret: 你的谷歌客户端密钥 scope: "email profile" # 按需设置权限
3. 安全配置(security.yml)
在对应的防火墙里,必须配置OAuth相关的规则,指定回调路径和你的自定义用户提供者:
# security.yml security: firewalls: main: # 其他防火墙配置... oauth: resource_owners: google: "/login/check-google" # 和routing.yml里的回调路径一致 login_path: /login # 你的登录页面路径 failure_path: /login oauth_user_provider: service: app.oauth_provider # 你的OAuthProvider.php的服务ID # 还要确保你的自定义用户提供者被注册 providers: app_oauth_provider: id: app.oauth_provider
4. 自定义OAuthProvider服务
你的OAuthProvider.php必须实现OAuthAwareUserProviderInterface,并且在services.yml里注册:
# services.yml services: app.oauth_provider: class: App\Security\OAuthProvider # 替换成你的类实际路径
类里要实现loadUserByOAuthUserResponse()方法,处理从谷歌返回的用户信息,完成登录或注册逻辑。
最后验证
做完以上配置后,再执行一次php bin/console debug:router,确认hwi_oauth_service_redirect_google或者hwi_oauth_service_redirect路由存在,然后用Twig生成的链接访问,应该就不会出现404了。
内容的提问来源于stack exchange,提问作者Brian Chen
相关产品推荐
相关产品推荐

