因此,我打算使用Google提供身份驗證,除了用戶ID和角色之外,我的身邊不會有任何憑據或帳戶特定信息。有誰知道如何去做一個用戶出現驗證symfony只有身份證?我見過自定義的用戶提供者,但他們需要密碼,鹽,散列算法以及哪些不是我沒有/需要的。PHP Symfony認證/授權登錄{Google/Facebook/etc}
0
A
回答
1
爲了實現谷歌/ Facebook的登錄,HWIOAuth包是一個不錯的選擇。它支持20多個服務提供商。實施Facebook和Google身份驗證的整個過程有點過長,無法在此處發佈。 您可以在這裏閱讀一步一步的說明:http://praveesh4u.github.io/blog/2014/01/23/oauth-in-symfony/
0
我用下面的代碼此:
/**
* Sign in with Facebook
* @return redirect
*/
public function signInAction() {
$request = $this->get('request');
$session = $this->get('session');
// Facebook init
$facebook = $this->get('bw.user.social')->getFacebook();
if ($request->query->has('code')) {
if ($facebook->getUser()) {
$userProfile = $facebook->api('/me/');
if ($userProfile) {
$user = $this->getDoctrine()
->getRepository('BWUserBundle:User')
->loadUserBySocialId('facebookId', $userProfile['id']);
if ($user == NULL) {
// Email existence check
$isEmailExists = $this->getDoctrine()
->getRepository('BWUserBundle:User')
->isEmailExists($userProfile['email']);
if ($isEmailExists) {
$session->getFlashBag()->add('danger', '<b>Error!</b> e-mail "'. $userProfile['email'] .'" already exists.');
return $this->redirect($this->generateUrl('home'));
}
$i = 0;
do {
$username = $userProfile['username'] . ($i ? '_'. $i : '');
$isUsernameExists = $this->getDoctrine()
->getRepository('BWUserBundle:User')
->isUsernameExists($username);
$i++;
} while ($isUsernameExists);
// Создание нового пользователя
$em = $this->getDoctrine()->getManager();
$role = $em->getRepository('BWUserBundle:Role')->findOneBy(array(
'role' => 'ROLE_USER',
));
$user = new User();
$user
->setFacebookId($userProfile['id'])
->setEmail($userProfile['email'])
->setUsername($username)
->setActive(TRUE)
->setConfirm(TRUE)
->setHash('')
->addRole($role)
->generatePassword()
;
$em->persist($user);
$em->flush();
}
if ($user) {
$this->authorizeUser($user); // return TRUE if success
}
}
}
} else {
$params = array(
'scope' => $this->get('service_container')->getParameter('social')['facebook']['scopes'],
'redirect_uri' => $this->get('router')->generate('user_facebook_sign_in', array(), TRUE),
);
return $this->redirect($facebook->getLoginUrl($params));
}
return $this->redirect($this->generateUrl('home'));
}
/**
* User auth
* @param \BW\UserBundle\Entity\User $user
* @return boolean
*/
protected function authorizeUser(User $user) {
$request = $this->getRequest();
/* Social User auth in Symfony */
$token = new UsernamePasswordToken($user, $user->getPassword(), 'auth', $user->getRoles());
$this->get('security.context')->setToken($token);
// Fire the login event
// Logging the user in above the way we do it doesn't do this automatically
$event = new InteractiveLoginEvent($request, $token);
$this->get('event_dispatcher')->dispatch('security.interactive_login', $event);
return TRUE;
}
,還可以使用facebook PHP SDK
相關問題
- 1. Laravel授權認證
- 2. REST認證/授權
- 3. Twitter授權登錄
- 4. 如何爲oracle restful web services執行登錄認證和授權?
- 5. Rails_admin,cancancan授權,設計認證。登錄重定向?
- 6. Android和PHP登錄認證
- 7. Web服務授權認證
- 8. asp.net認證和授權
- 9. Websockets(Socket.io)和認證/授權
- 10. Django-Tastypie:認證和授權
- 11. Java Web認證和授權
- 12. SOA服務認證/授權
- 13. Java認證和授權
- 14. Strongloop的授權和認證
- 15. asp.net webservices認證/授權
- 16. 認證,授權和會計?
- 17. SVN認證和授權
- 18. diff認證/授權機制
- 19. .Net授權/認證理念
- 20. 用戶被授權登錄
- 21. Facebook的授權及登錄
- 22. Twitter oAuth登錄。如何獲得getAuthorizeURL(授權)的第一次(認證),一旦用戶已授予的權限
- 23. 當用戶登錄時授予授權
- 24. 登錄認證
- 25. Symfony 2登錄驗證
- 26. 授權與認證在Route.php沿:Laravel 5.1
- 27. Auth0登錄認證
- 28. 登錄認證2.0
- 29. WPF登錄認證
- 30. 使用curl登錄認證php
感謝,OAuthUser和OAuthUserProvider有我正在尋找的代碼。實際上我之前看了一下HWIOAuth軟件包,但由於缺少文檔而丟棄了它,並且不想瀏覽所有的代碼。沒有太長時間才能爲Google啓動OAuth並運行,只需要弄清楚如何與交響樂集成只有一個ID。 – James