Private
Public Access
1
0

add facebook login module, hwi/HWIOAuthBundle

This commit is contained in:
2016-11-04 15:30:29 +01:00
parent e1b22358b3
commit 88144ebaa4
12 changed files with 431 additions and 10 deletions

View File

@@ -21,8 +21,58 @@ class User extends BaseUser
*/
protected $id;
/**
* @ORM\Column(name="facebook_id", type="string", length=255, nullable=true)
*/
private $facebookId;
private $facebookAccessToken;
public function __construct()
{
parent::__construct();
}
/**
* Set facebookId
*
* @param string $facebookId
*
* @return User
*/
public function setFacebookId($facebookId)
{
$this->facebookId = $facebookId;
return $this;
}
/**
* Get facebookId
*
* @return string
*/
public function getFacebookId()
{
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;
}
}

View File

@@ -21,8 +21,39 @@ class User extends BaseUser
*/
protected $id;
/**
* @ORM\Column(name="facebook_id", type="string", length=255, nullable=true)
*/
private $facebookId;
private $facebookAccessToken;
public function __construct()
{
parent::__construct();
}
/**
* Set facebookId
*
* @param string $facebookId
*
* @return User
*/
public function setFacebookId($facebookId)
{
$this->facebookId = $facebookId;
return $this;
}
/**
* Get facebookId
*
* @return string
*/
public function getFacebookId()
{
return $this->facebookId;
}
}

View File

@@ -7,3 +7,16 @@ twig:
project_name: 'MineSeeker'
project_shortname: 'Mine'
project_monogram: 'MS'
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
facebook:
type: facebook
client_id: 320599508311862
client_secret: 18d4f48cdd274bccee2678e5eff3f557
scope: ""
options:
display: popup
auth_type: rerequest
csrf: true

View File

@@ -0,0 +1,16 @@
hwi_oauth_redirect:
resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
prefix: /connect
hwi_oauth_login:
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
prefix: /login
facebook_login:
path: /login/check-facebook
google_login:
path: /login/check-google
github_login:
path: /login/check-github

View File

@@ -1,4 +1,4 @@
services:
# jotunheimr_user.example:
# class: Jotunheimr\UserBundle\Example
# arguments: ["@service_id", "plain_value", %parameter%]
my.custom.user_provider:
class: Jotunheimr\UserBundle\Security\Core\User\MyFOSUBUserProvider
arguments: ['@fos_user.user_manager', { facebook: facebookId }]

View File

@@ -3,6 +3,46 @@
{% trans_default_domain 'FOSUserBundle' %}
{% block fos_user_content %}
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '320599508311862',
xfbml : true,
version : 'v2.8'
});
FB.AppEvents.logPageView();
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
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'});
}
});
}
</script>
<a href="#" onclick="fb_login();">Facebook Connect Button (Dialog)</a>
{% if error %}
{{ error.messageKey|trans(error.messageData, 'security') }}
{% endif %}
@@ -12,11 +52,11 @@
<input type="text" id="username" name="_username" value="{{ last_username }}"
placeholder="{{ 'security.login.username'|trans }}"
required="required" autofocus/>
autofocus/>
<input type="password" id="password" name="_password"
placeholder="{{ 'security.login.password'|trans }}"
required="required"/>
/>
<input type="checkbox" id="remember_me" name="_remember_me" value="on"/>
<label for="remember_me">{{ 'security.login.remember_me'|trans }}</label>

View File

@@ -0,0 +1,51 @@
<?php
namespace Jotunheimr\UserBundle\Security\Core\User;
use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface;
use HWI\Bundle\OAuthBundle\Security\Core\User\FOSUBUserProvider as BaseFOSUBProvider;
use Jotunheimr\UserBundle\Entity\User;
use Symfony\Component\Security\Core\User\UserInterface;
class MyFOSUBUserProvider extends BaseFOSUBProvider
{
/**
* {@inheritDoc}
*/
public function connect(UserInterface $user, UserResponseInterface $response)
{
$property = $this->getProperty($response);
$username = $response->getUsername();
$existingUser = $this->userManager->findUserBy(array($property => $username));
if (null !== $existingUser) {
$this->userManager->updateUser($existingUser);
}
$this->userManager->updateUser($user);
}
/**
* {@inheritdoc}
*/
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
{
$userEmail = $response->getEmail();
$user = $this->userManager->findUserByEmail($userEmail);
if (null === $user) {
$username = $response->getRealName();
$user = new User();
$user->setUsername($username);
return $user;
}
$serviceName = $response->getResourceOwner()->getName();
$setter = 'set' . ucfirst($serviceName) . 'AccessToken';
$user->$setter($response->getAccessToken());
return $user;
}
}

View File

@@ -1 +1,5 @@
Bazmeg index.
{% extends "::base.html.twig" %}
{% block body %}
Bazmeg index.
{% endblock %}