我正在使用HWIOAuthBundle
withFOSUserBundle
成功。
当我转到该/login
页面时,它会将我重定向到 Google 帐户、授权并返回填写数据的注册表单(密码字段除外)。
是否可以使用省略注册表单自动注册用户?
在这种情况下,由于使用 Google 帐户进行身份验证,我们不需要密码。
我应该如何实现这种情况?
我正在使用HWIOAuthBundle
withFOSUserBundle
成功。
当我转到该/login
页面时,它会将我重定向到 Google 帐户、授权并返回填写数据的注册表单(密码字段除外)。
是否可以使用省略注册表单自动注册用户?
在这种情况下,由于使用 Google 帐户进行身份验证,我们不需要密码。
我应该如何实现这种情况?
一个问题有点老了,但迟到总比没有好。
您只需要创建一个自定义提供程序- 如果您想将捆绑包与 FOSUserBundle 集成,您需要覆盖FOSUBUserProvider类。
在HWIOAuthBundle/Security/Core/User目录中,您可以找到 OAuthBundle 中可用的所有提供程序。
要在连接时创建新用户,您只需覆盖 FOSUBUserProvider(或 EntityUserProvider 等)提供程序类的 loadUserByOAuthUserResponse() 方法。如您所见,如果在数据库中找不到用户,默认方法会抛出异常,您只需要它调用 userManager 并创建新条目。
这与 FOSFacebookBundle 集成的情况完全相同(如果您这样做了)。
希望这个答案对您有所帮助(尤其是听起来有点混乱)。
编辑:
我发布了一篇解释集成过程的博客文章。
这里有一个关于如何集成 HWIOAuthBundle 和 FOSUserBundle 以实现自动用户注册和更新的很好的演练,可能值得一读:
是的当然。
您应该处理来自 google 的响应并手动授权用户,例如:
// authorize
$token = new OAuthToken(null, $user->getRoles());
$token->setUser($user);
$token->setAuthenticated(true);
// update session
$session = $this->getContainer()->get('session');
$session->set('_security_secured_area', serialize($token));
$session->save();
在用户被授权后,用户重定向到呼叫页面