diff --git a/app/config/security.yml b/app/config/security.yml index 02a670e..b360592 100644 --- a/app/config/security.yml +++ b/app/config/security.yml @@ -24,18 +24,13 @@ security: oauth_user_provider: service: my.custom.user_provider - logout: - path: /logout - target: / - main: - pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager default_target_path: / - - logout: true - anonymous: true + logout: + path: /logout + target: / access_control: - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } diff --git a/package.json b/package.json index cbcb539..6571b2f 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,8 @@ "howler": "^2.0.1", "js-base64": "^2.1.9", "react": "^15.3.2", - "react-dom": "^15.3.2" + "react-dom": "^15.3.2", + "webpack": "^1.13.3" }, "devDependencies": {}, "scripts": { diff --git a/src/Jotunheimr/UserBundle/Entity/User.php b/src/Jotunheimr/UserBundle/Entity/User.php index 7761f8f..b339e65 100644 --- a/src/Jotunheimr/UserBundle/Entity/User.php +++ b/src/Jotunheimr/UserBundle/Entity/User.php @@ -28,6 +28,20 @@ class User extends BaseUser private $facebookAccessToken; + /** + * @var string + * + * @ORM\Column(name="real_name", type="string", length=255, nullable=true) + */ + private $realName; + + /** + * @var string + * + * @ORM\Column(name="nick_name", type="string", length=255, nullable=true) + */ + private $nickName; + public function __construct() { parent::__construct(); @@ -75,4 +89,52 @@ class User extends BaseUser { return $this->facebookAccessToken; } + + /** + * Set realName + * + * @param string $realName + * + * @return User + */ + public function setRealName($realName) + { + $this->realName = $realName; + + return $this; + } + + /** + * Get realName + * + * @return string + */ + public function getRealName() + { + return $this->realName; + } + + /** + * Set nickName + * + * @param string $nickName + * + * @return User + */ + public function setNickName($nickName) + { + $this->nickName = $nickName; + + return $this; + } + + /** + * Get nickName + * + * @return string + */ + public function getNickName() + { + return $this->nickName; + } } diff --git a/src/Jotunheimr/UserBundle/Entity/User.php~ b/src/Jotunheimr/UserBundle/Entity/User.php~ index a986803..b339e65 100644 --- a/src/Jotunheimr/UserBundle/Entity/User.php~ +++ b/src/Jotunheimr/UserBundle/Entity/User.php~ @@ -28,6 +28,20 @@ class User extends BaseUser private $facebookAccessToken; + /** + * @var string + * + * @ORM\Column(name="real_name", type="string", length=255, nullable=true) + */ + private $realName; + + /** + * @var string + * + * @ORM\Column(name="nick_name", type="string", length=255, nullable=true) + */ + private $nickName; + public function __construct() { parent::__construct(); @@ -56,4 +70,71 @@ class User extends BaseUser { return $this->facebookId; } + + /** + * @param string $facebookAccessToken + * @return User + */ + public function setFacebookAccessToken($facebookAccessToken) + { + $this->facebookAccessToken = $facebookAccessToken; + + return $this; + } + + /** + * @return string + */ + public function getFacebookAccessToken() + { + return $this->facebookAccessToken; + } + + /** + * Set realName + * + * @param string $realName + * + * @return User + */ + public function setRealName($realName) + { + $this->realName = $realName; + + return $this; + } + + /** + * Get realName + * + * @return string + */ + public function getRealName() + { + return $this->realName; + } + + /** + * Set nickName + * + * @param string $nickName + * + * @return User + */ + public function setNickName($nickName) + { + $this->nickName = $nickName; + + return $this; + } + + /** + * Get nickName + * + * @return string + */ + public function getNickName() + { + return $this->nickName; + } } diff --git a/src/Jotunheimr/UserBundle/Resources/config/config.yml b/src/Jotunheimr/UserBundle/Resources/config/config.yml index 0771f04..911edb5 100644 --- a/src/Jotunheimr/UserBundle/Resources/config/config.yml +++ b/src/Jotunheimr/UserBundle/Resources/config/config.yml @@ -15,7 +15,7 @@ hwi_oauth: type: facebook client_id: 320599508311862 client_secret: 18d4f48cdd274bccee2678e5eff3f557 - scope: "" + scope: "public_profile,email" options: display: popup auth_type: rerequest diff --git a/src/Jotunheimr/UserBundle/Resources/config/routing.yml b/src/Jotunheimr/UserBundle/Resources/config/routing.yml index 7517bee..dec8e06 100644 --- a/src/Jotunheimr/UserBundle/Resources/config/routing.yml +++ b/src/Jotunheimr/UserBundle/Resources/config/routing.yml @@ -1,3 +1,4 @@ +# HWIOAuthBundle routes hwi_oauth_redirect: resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml" prefix: /connect diff --git a/src/Jotunheimr/UserBundle/Resources/config/services.yml b/src/Jotunheimr/UserBundle/Resources/config/services.yml index d7de31f..09f88f9 100644 --- a/src/Jotunheimr/UserBundle/Resources/config/services.yml +++ b/src/Jotunheimr/UserBundle/Resources/config/services.yml @@ -1,4 +1,4 @@ services: my.custom.user_provider: class: Jotunheimr\UserBundle\Security\Core\User\MyFOSUBUserProvider - arguments: ['@fos_user.user_manager', { facebook: facebookId }] + arguments: ['@fos_user.user_manager', { facebook: facebookId }, '@doctrine.orm.entity_manager'] diff --git a/src/Jotunheimr/UserBundle/Resources/views/Security/login.html.twig b/src/Jotunheimr/UserBundle/Resources/views/Security/login.html.twig index ec7f77d..1d5a06d 100644 --- a/src/Jotunheimr/UserBundle/Resources/views/Security/login.html.twig +++ b/src/Jotunheimr/UserBundle/Resources/views/Security/login.html.twig @@ -10,7 +10,6 @@ xfbml : true, version : 'v2.8' }); - FB.AppEvents.logPageView(); }; (function(d, s, id){ @@ -24,16 +23,11 @@ function fb_login() { FB.getLoginStatus(function(response) { if (response.status === 'connected') { - // connected - alert('Already connected, redirect to login page to create token.'); document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}"; } else { - // not_authorized FB.login(function(response) { if (response.authResponse) { document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}"; - } else { - alert('Cancelled.'); } }, {scope: 'email'}); } diff --git a/src/Jotunheimr/UserBundle/Security/Core/User/MyFOSUBUserProvider.php b/src/Jotunheimr/UserBundle/Security/Core/User/MyFOSUBUserProvider.php index ecfd30d..55cad7a 100644 --- a/src/Jotunheimr/UserBundle/Security/Core/User/MyFOSUBUserProvider.php +++ b/src/Jotunheimr/UserBundle/Security/Core/User/MyFOSUBUserProvider.php @@ -2,6 +2,8 @@ namespace Jotunheimr\UserBundle\Security\Core\User; +use Doctrine\ORM\EntityManager; +use FOS\UserBundle\Model\UserManagerInterface; use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider; use Jotunheimr\UserBundle\Entity\User; @@ -9,6 +11,15 @@ use Symfony\Component\Security\Core\User\UserInterface; class MyFOSUBUserProvider extends BaseFOSUBProvider { + /** @var EntityManager */ + private $em; + + public function __construct(UserManagerInterface $userManager, array $properties, EntityManager $em) + { + parent::__construct($userManager, $properties); + $this->em = $em; + } + /** * {@inheritDoc} */ @@ -35,9 +46,19 @@ class MyFOSUBUserProvider extends BaseFOSUBProvider $user = $this->userManager->findUserByEmail($userEmail); if (null === $user) { - $username = $response->getRealName(); $user = new User(); - $user->setUsername($username); + + $user->setFacebookId($response->getUsername()); + $user->setEmail($response->getEmail()); + $user->setEmailCanonical($response->getEmail()); + $user->setUsername($response->getUsername()); + $user->setRealName($response->getRealName()); + $user->setNickName($response->getNickname()); + $user->setPassword('social-user'); + $user->setEnabled(true); + + $this->em->persist($user); + $this->em->flush(); return $user; } diff --git a/src/Mine/SeekerBundle/Resources/config/config.yml b/src/Mine/SeekerBundle/Resources/config/config.yml index c314493..8b16a89 100644 --- a/src/Mine/SeekerBundle/Resources/config/config.yml +++ b/src/Mine/SeekerBundle/Resources/config/config.yml @@ -37,7 +37,7 @@ gos_web_socket: resources: - "@MineSeekerBundle/Resources/config/pubsub/routing.yml" client: - firewall: main + firewall: secured_area session_handler: "@session.handler.pdo" storage: driver: "@gos_web_socket.client_storage.driver.predis"