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

@@ -19,6 +19,7 @@ class AppKernel extends Kernel
new Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new FOS\UserBundle\FOSUserBundle(),
new HWI\Bundle\OAuthBundle\HWIOAuthBundle(),
new Gos\Bundle\WebSocketBundle\GosWebSocketBundle(),
new Gos\Bundle\PubSubRouterBundle\GosPubSubRouterBundle(),
new Doctrine\Bundle\DoctrineCacheBundle\DoctrineCacheBundle(),

View File

@@ -11,6 +11,22 @@ security:
id: fos_user.user_provider.username_email
firewalls:
secured_area:
anonymous: ~
oauth:
resource_owners:
facebook: /login/check-facebook
google: /login/check-google
my_github: /login/check-github
login_path: /login
failure_path: /login
use_forward: false
oauth_user_provider:
service: my.custom.user_provider
logout:
path: /logout
target: /
main:
pattern: ^/
form_login:
@@ -22,7 +38,8 @@ security:
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/play, role: ROLE_USER }
- { path: ^/admin, role: ROLE_SUPER_ADMIN }

View File

@@ -33,7 +33,8 @@
"doctrine/doctrine-migrations-bundle": "^1.0",
"symfony/assetic-bundle": "^2.8",
"predis/predis": "^1.0",
"snc/redis-bundle": "^2.0"
"snc/redis-bundle": "^2.0",
"hwi/oauth-bundle": "^0.5.1"
},
"require-dev": {
"sensio/generator-bundle": "^3.0",

201
composer.lock generated
View File

@@ -4,8 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "7c1e046373c318178e58c9617d9c6931",
"content-hash": "b09b605e8d336a4e0bf774ce6f486957",
"hash": "9ab894ab9dec6a53088c8bea70e8ee9a",
"content-hash": "06afd75cc129d2765a6803d384805417",
"packages": [
{
"name": "doctrine/annotations",
@@ -1560,6 +1560,155 @@
"abandoned": "guzzle/guzzle",
"time": "2014-05-01 21:36:02"
},
{
"name": "hwi/oauth-bundle",
"version": "0.5.1",
"source": {
"type": "git",
"url": "https://github.com/hwi/HWIOAuthBundle.git",
"reference": "429ae3fe1641a54ea0934bb06dac355affc41f8d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/hwi/HWIOAuthBundle/zipball/429ae3fe1641a54ea0934bb06dac355affc41f8d",
"reference": "429ae3fe1641a54ea0934bb06dac355affc41f8d",
"shasum": ""
},
"require": {
"kriswallsmith/buzz": "~0.13",
"php": ">=5.3.3",
"symfony/form": "~2.3|~3.0",
"symfony/framework-bundle": "~2.3|~3.0",
"symfony/options-resolver": "~2.3|~3.0",
"symfony/security-bundle": "~2.3|~3.0",
"symfony/yaml": "~2.3|~3.0"
},
"conflict": {
"twig/twig": "<1.12"
},
"require-dev": {
"doctrine/orm": "~2.3",
"fabpot/php-cs-fixer": "~1.11",
"friendsofsymfony/user-bundle": "~1.3|~2.0",
"phpunit/phpunit": "~4.8|~5.0",
"symfony/phpunit-bridge": "~2.7|~3.0",
"symfony/property-access": "~2.3|~3.0",
"symfony/stopwatch": "~2.5|~3.0",
"symfony/twig-bundle": "~2.3|~3.0",
"symfony/validator": "~2.3|~3.0"
},
"suggest": {
"doctrine/doctrine-bundle": "to use Doctrine user provider",
"friendsofsymfony/user-bundle": "to connect FOSUB with this bundle",
"symfony/property-access": "to use FOSUB integration with this bundle",
"symfony/twig-bundle": "to use the Twig hwi_oauth_* functions"
},
"type": "symfony-bundle",
"extra": {
"branch-alias": {
"dev-master": "0.5-dev"
}
},
"autoload": {
"psr-4": {
"HWI\\Bundle\\OAuthBundle\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Contributors",
"homepage": "https://github.com/hwi/HWIOAuthBundle/contributors"
},
{
"name": "Joseph Bielawski",
"email": "stloyd@gmail.com"
},
{
"name": "Alexander",
"email": "iam.asm89@gmail.com"
},
{
"name": "Geoffrey Bachelet",
"email": "geoffrey.bachelet@gmail.com"
}
],
"description": "Support for authenticating users using both OAuth1.0a and OAuth2 in Symfony2.",
"homepage": "http://github.com/hwi/HWIOAuthBundle",
"keywords": [
"37signals",
"Authentication",
"Deezer",
"EVE Online",
"amazon",
"asana",
"auth0",
"azure",
"bitbucket",
"bitly",
"box",
"bufferapp",
"clever",
"dailymotion",
"deviantart",
"discogs",
"disqus",
"dropbox",
"eventbrite",
"facebook",
"firewall",
"fiware",
"flickr",
"foursquare",
"github",
"google",
"hubic",
"instagram",
"jawbone",
"jira",
"linkedin",
"mail.ru",
"oauth",
"oauth1",
"oauth2",
"odnoklassniki",
"paypal",
"qq",
"reddit",
"runkeeper",
"salesforce",
"security",
"sensio connect",
"sina weibo",
"slack",
"sound cloud",
"spotify",
"stack exchange",
"stereomood",
"strava",
"toshl",
"trakt",
"trello",
"twitch",
"twitter",
"vkontakte",
"wechat",
"windows live",
"wordpress",
"wunderlist",
"xing",
"yahoo",
"yandex",
"youtube"
],
"time": "2016-10-03 14:27:17"
},
{
"name": "incenteev/composer-parameter-handler",
"version": "v2.1.2",
@@ -1738,6 +1887,54 @@
],
"time": "2015-11-12 13:51:40"
},
{
"name": "kriswallsmith/buzz",
"version": "v0.15",
"source": {
"type": "git",
"url": "https://github.com/kriswallsmith/Buzz.git",
"reference": "d4041666c3ffb379af02a92dabe81c904b35fab8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/kriswallsmith/Buzz/zipball/d4041666c3ffb379af02a92dabe81c904b35fab8",
"reference": "d4041666c3ffb379af02a92dabe81c904b35fab8",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
"phpunit/phpunit": "3.7.*"
},
"suggest": {
"ext-curl": "*"
},
"type": "library",
"autoload": {
"psr-0": {
"Buzz": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Kris Wallsmith",
"email": "kris.wallsmith@gmail.com",
"homepage": "http://kriswallsmith.net/"
}
],
"description": "Lightweight HTTP client",
"homepage": "https://github.com/kriswallsmith/Buzz",
"keywords": [
"curl",
"http client"
],
"time": "2015-06-25 17:26:56"
},
{
"name": "monolog/monolog",
"version": "1.21.0",

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 %}