Private
Public Access
1
0

working user authentication w/ fb and plain login

This commit is contained in:
2016-11-04 20:57:34 +01:00
parent 88144ebaa4
commit ada68b9100
10 changed files with 175 additions and 20 deletions

View File

@@ -24,18 +24,13 @@ security:
oauth_user_provider: oauth_user_provider:
service: my.custom.user_provider service: my.custom.user_provider
logout:
path: /logout
target: /
main:
pattern: ^/
form_login: form_login:
provider: fos_userbundle provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager csrf_token_generator: security.csrf.token_manager
default_target_path: / default_target_path: /
logout:
logout: true path: /logout
anonymous: true target: /
access_control: access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }

View File

@@ -13,7 +13,8 @@
"howler": "^2.0.1", "howler": "^2.0.1",
"js-base64": "^2.1.9", "js-base64": "^2.1.9",
"react": "^15.3.2", "react": "^15.3.2",
"react-dom": "^15.3.2" "react-dom": "^15.3.2",
"webpack": "^1.13.3"
}, },
"devDependencies": {}, "devDependencies": {},
"scripts": { "scripts": {

View File

@@ -28,6 +28,20 @@ class User extends BaseUser
private $facebookAccessToken; 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() public function __construct()
{ {
parent::__construct(); parent::__construct();
@@ -75,4 +89,52 @@ class User extends BaseUser
{ {
return $this->facebookAccessToken; 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;
}
} }

View File

@@ -28,6 +28,20 @@ class User extends BaseUser
private $facebookAccessToken; 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() public function __construct()
{ {
parent::__construct(); parent::__construct();
@@ -56,4 +70,71 @@ class User extends BaseUser
{ {
return $this->facebookId; 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;
}
} }

View File

@@ -15,7 +15,7 @@ hwi_oauth:
type: facebook type: facebook
client_id: 320599508311862 client_id: 320599508311862
client_secret: 18d4f48cdd274bccee2678e5eff3f557 client_secret: 18d4f48cdd274bccee2678e5eff3f557
scope: "" scope: "public_profile,email"
options: options:
display: popup display: popup
auth_type: rerequest auth_type: rerequest

View File

@@ -1,3 +1,4 @@
# HWIOAuthBundle routes
hwi_oauth_redirect: hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml" resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix: /connect prefix: /connect

View File

@@ -1,4 +1,4 @@
services: services:
my.custom.user_provider: my.custom.user_provider:
class: Jotunheimr\UserBundle\Security\Core\User\MyFOSUBUserProvider 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']

View File

@@ -10,7 +10,6 @@
xfbml : true, xfbml : true,
version : 'v2.8' version : 'v2.8'
}); });
FB.AppEvents.logPageView();
}; };
(function(d, s, id){ (function(d, s, id){
@@ -24,16 +23,11 @@
function fb_login() { function fb_login() {
FB.getLoginStatus(function(response) { FB.getLoginStatus(function(response) {
if (response.status === 'connected') { if (response.status === 'connected') {
// connected
alert('Already connected, redirect to login page to create token.');
document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}"; document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}";
} else { } else {
// not_authorized
FB.login(function(response) { FB.login(function(response) {
if (response.authResponse) { if (response.authResponse) {
document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}"; document.location = "{{ url("hwi_oauth_service_redirect", {service: "facebook"}) }}";
} else {
alert('Cancelled.');
} }
}, {scope: 'email'}); }, {scope: 'email'});
} }

View File

@@ -2,6 +2,8 @@
namespace Jotunheimr\UserBundle\Security\Core\User; 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\OAuth\Response\UserResponseInterface;
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider; use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider;
use Jotunheimr\UserBundle\Entity\User; use Jotunheimr\UserBundle\Entity\User;
@@ -9,6 +11,15 @@ use Symfony\Component\Security\Core\User\UserInterface;
class MyFOSUBUserProvider extends BaseFOSUBProvider 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} * {@inheritDoc}
*/ */
@@ -35,9 +46,19 @@ class MyFOSUBUserProvider extends BaseFOSUBProvider
$user = $this->userManager->findUserByEmail($userEmail); $user = $this->userManager->findUserByEmail($userEmail);
if (null === $user) { if (null === $user) {
$username = $response->getRealName();
$user = new User(); $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; return $user;
} }

View File

@@ -37,7 +37,7 @@ gos_web_socket:
resources: resources:
- "@MineSeekerBundle/Resources/config/pubsub/routing.yml" - "@MineSeekerBundle/Resources/config/pubsub/routing.yml"
client: client:
firewall: main firewall: secured_area
session_handler: "@session.handler.pdo" session_handler: "@session.handler.pdo"
storage: storage:
driver: "@gos_web_socket.client_storage.driver.predis" driver: "@gos_web_socket.client_storage.driver.predis"