venca-x/social-login 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

venca-x/social-login

最新稳定版本:1.2.15

Composer 安装命令:

composer require venca-x/social-login

包简介

Nette addon. Login with social networks ( Faceboook, Google, Twitter )

README 文档

README

Build Status Coverage Status Latest Stable Version Latest Unstable Version Total Downloads License

Nette addon for login with social networks

Version Facebook App API PHP Recommended Nette
dev-master 8.0 or own >= 7.2 (support 8.0) Nette 3.0
1.2.x 8.0 or own >= 7.2 (support 8.0) Nette 3.0
1.1.x 2.6 >= 7.0 Nette 2.4 (Nette\SmartObject)
1.0.x 2.6 >= 5.5 Nette 2.4, 2.3 (Nette\Object)

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

Facebook Developers - create new website app. Full: Settings -> Web page -> Site URL : http://www.mypage.com

Google

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

Twitter

Register a new app at dev.twitter.com/apps/

统计信息

  • 总下载量: 388.71k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 9
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 8
  • Watchers: 2
  • Forks: 10
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2014-12-26