add facebook login module, hwi/HWIOAuthBundle
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 }]
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -1 +1,5 @@
|
||||
Bazmeg index.
|
||||
{% extends "::base.html.twig" %}
|
||||
|
||||
{% block body %}
|
||||
Bazmeg index.
|
||||
{% endblock %}
|
||||
|
||||
Reference in New Issue
Block a user