venca-x / social-login
Nette addon. Login with social networks ( Faceboook, Google, Twitter )
Installs: 314 039
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 2
Forks: 11
Open Issues: 0
Requires
- php: >=7.2
- abraham/twitteroauth: ^2.0.0
- google/apiclient: ^2.8
- league/oauth2-facebook: ^2.0
- nette/application: ^3.0
Requires (Dev)
- nette/bootstrap: ^3.0
- nette/robot-loader: ^3.0
- nette/tester: ^2.0
- tracy/tracy: ^2.4
Conflicts
- google/apiclient: <2.8.0
README
Nette addon for login with social networks
All permissions for Facebook fields
Installation
Install dev-master version for Nette 3.0:
composer require venca-x/social-login:dev-master
Install 1.2.x version for Nette 3.0 (Nette\SmartObject):
composer require venca-x/social-login:^1.2.0
Install 1.1.x version for Nette 2.4 (Nette\SmartObject):
composer require venca-x/social-login:^1.1.0
Install 1.0.x version for Nette 2.4 or Nette 2.3 (Nette\Object):
composer require venca-x/social-login:^1.0.0
Configuration
config.neon
parameters:
facebook:
appId: '123456789'
appSecret: '987654321'
callbackURL: 'http://www.muj-web.cz/homepage/facebook-login'
defaultFbGraphVersion: 'v8.0'
google:
clientId: '123456789'
clientSecret: '987654321'
callbackURL: 'http://www.muj-web.cz/homepage/google-login'
twitter:
consumerKey: '123456789'
consumerSecret: '987654321'
callbackURL: 'http://www.muj-web.cz/homepage/twitter-login'
nette:
session:
autoStart: true # default is smart
services:
...
- VencaX\SocialLogin({ facebook: %facebook%, google: %google%, twitter: %twitter% }, 'domain-social-login' )
Where 'domain-social-login' replace to your unique identifier (it's cookie name for last used services for login)
BasePresenter.php
use VencaX; /** @var VencaX\SocialLogin */ private $socialLogin; public function injectSocialLogin( VencaX\SocialLogin $socialLogin ) { $this->socialLogin = $socialLogin; //set scope $this->socialLogin->facebook->setScope( ['email'] ); $this->socialLogin->google->setScope( array( "https://www.googleapis.com/auth/plus.me", "https://www.googleapis.com/auth/userinfo.email" ) ); } public function renderIn() { //$facebookLoginUrl = $this->socialLogin->facebook->getLoginUrl(); //$googleLoginUrl = $this->socialLogin->google->getLoginUrl(); //$twitterLoginUrl = $this->socialLogin->twitter->getLoginUrl(); //dump( $this->socialLogin->getSocialLoginCookie() ); //$this->template->facebookLastLogin = $this->socialLogin->facebook->isThisServiceLastLogin(); //$this->template->googleLastLogin = $this->socialLogin->google->isThisServiceLastLogin(); //$this->template->twitterLastLogin = $this->socialLogin->twitter->isThisServiceLastLogin(); //... }
Layout for in.latte:
<a rel="nofollow" href="{$facebookLoginUrl}" {if $facebookLastLogin}class="last-login"{/if}><i class="fa fa-facebook-square fa-lg"></i></a> <a rel="nofollow" href="{$googleLoginUrl}" {if $googleLastLogin}class="last-login"{/if}><i class="fa fa-google-plus-square fa-lg"></i></a><br/> <a rel="nofollow" href="{plink User:twitterLogin}" {if $twitterLastLogin}class="last-login"{/if}><i class="fa fa-twitter-square fa-lg"></i></a><br/> <a rel="nofollow" href="{plink User:registration}"><i class="fa fa-plus-square fa-lg"></i> Zaregistrovat</a>
Simple login
HomepagePresenter.php
public function actionFacebookLogin() { try { $me = $this->socialLogin->facebook->getMe( array( FacebookLogin::ID, FacebookLogin::EMAIL, FacebookLogin::NAME, FacebookLogin::FIRST_NAME, FacebookLogin::LAST_NAME ) ); dump( $me ); exit; } catch( Exception $e ) { $this->flashMessage( $e->getMessage(), "alert-danger" ); $this->redirect("Homepage:default"); } } public function actionGoogleLogin( $code ) { try { $me = $this->socialLogin->google->getMe( $code ); dump( $me ); exit; } catch( Exception $e ) { $this->flashMessage( $e->getMessage(), "alert-danger" ); $this->redirect("Homepage:default"); } } //...
Simple logint with Twitter
public function actionTwitterLogin($oauth_token, $oauth_verifier) { try { $me = $this->socialLogin->twitter->getMe($oauth_token, $oauth_verifier); //$me = $this->socialLogin->twitter->getMe($oauth_token, $oauth_verifier, true);//when zou want user's email dump($me); exit; } catch (Exception $e) { $this->flashMessage($e->getMessage(), 'alert-danger'); $this->redirect('Homepage:default'); } }
Login with backlink
Use it when you want to redirect to specific URL after success login
HomepagePresenter.php
private $backlink = null; //render where are links to social networks public function renderIn() { if ($this->backlink) { $this->socialLogin->facebook->setState($this->backlink); $this->socialLogin->google->setState($this->backlink); } //$facebookLoginUrl = $this->socialLogin->facebook->getLoginUrl(); //$googleLoginUrl = $this->socialLogin->google->getLoginUrl(); //$twitterLoginUrl = $this->socialLogin->twitter->getLoginUrl(); //dump( $this->socialLogin->getSocialLoginCookie() ); //$this->template->facebookLastLogin = $this->socialLogin->facebook->isThisServiceLastLogin(); //$this->template->googleLastLogin = $this->socialLogin->google->isThisServiceLastLogin(); //$this->template->twitterLastLogin = $this->socialLogin->twitter->isThisServiceLastLogin(); } public function actionFacebookLogin($state = NULL) { try { if ($state) $this->backlink = $state; $me = $this->socialLogin->facebook->getMe(); //dump( $me ); //exit(); if($this->backlink != null) { $this->redirect($this->backlink); } } catch( Exception $e ) { $this->flashMessage( $e->getMessage(), "alert-danger" ); $this->redirect("Homepage:default"); } } public function actionGoogleLogin( $code, $state = NULL ) { try { if ($state) $this->backlink = $state; $me = $this->socialLogin->google->getMe( $code ); //dump( $me ); //exit(); if($this->backlink != null) { $this->redirect($this->backlink); } } catch( Exception $e ) { $this->flashMessage( $e->getMessage(), "alert-danger" ); $this->redirect("Homepage:default"); } } ...
Registration
Facebook Developers - create new website app. Full: Settings -> Web page -> Site URL : http://www.mypage.com
API Console - Google Code - create new project add Google+ API: APIs & auth -> APIs -> Google+ API set ON credentials: APIs & auth -> Credentials -> Crate new Client ID -> Web application