EAuth extension allows to authenticate users by the OpenID, OAuth 1.0 and OAuth 2.0 providers

Overview

Yii EAuth extension

EAuth extension allows to authenticate users with accounts on other websites. Supported protocols: OpenID, OAuth 1.0 and OAuth 2.0.

EAuth is a extension for provide a unified (does not depend on the selected service) method to authenticate the user. So, the extension itself does not perform login, does not register the user and does not bind the user accounts from different providers.

Why own extension and not a third-party service?

The implementation of the authorization on your own server has several advantages:

  • Full control over the process: what will be written in the authorization window, what data we get, etc.
  • Ability to change the appearance of the widget.
  • When logging via OAuth is possible to invoke methods on API.
  • Fewer dependencies on third-party services - more reliable application.

The extension allows you to:

  • Ignore the nuances of authorization through the different types of services, use the class based adapters for each service.
  • Get a unique user ID that can be used to register user in your application.
  • Extend the standard authorization classes to obtain additional data about the user.
  • Work with the API of social networks by extending the authorization classes.
  • Set up a list of supported services, customize the appearance of the widget, use the popup window without closing your application.

Extension includes:

  • The component that contains utility functions.
  • A widget that displays a list of services in the form of icons and allowing authorization in the popup window.
  • Base classes to create your own services.
  • Ready for authenticate via Google, Twitter, Facebook and other providers.

Included services:

  • OpenID:
    • Yahoo
    • Steam
    • Wargaming
  • OAuth1:
    • Twitter
    • LinkedIn
  • OAuth2:
    • Google
    • Facebook
    • Live
    • GitHub
    • Yandex (ru)
    • VKontake (ru)
    • Mail.ru (ru)
    • Odnoklassniki (ru)
    • Moi Krug(ru)
    • Dropbox
    • EVE Online

Resources

Requirements

Installation

  • Install loid and EOAuth extensions
  • Extract the release file under protected/extensions
  • In your protected/config/main.php, add the following:

...
	'import'=>array(
		'ext.eoauth.*',
		'ext.eoauth.lib.*',
		'ext.lightopenid.*',
		'ext.eauth.*',
		'ext.eauth.services.*',
	),
...
	'components'=>array(
		'loid' => array(
			'class' => 'ext.lightopenid.loid',
		),
		'eauth' => array(
			'class' => 'ext.eauth.EAuth',
			'popup' => true, // Use the popup window instead of redirecting.
			'cache' => false, // Cache component name or false to disable cache. Defaults to 'cache'.
			'cacheExpire' => 0, // Cache lifetime. Defaults to 0 - means unlimited.
			'services' => array( // You can change the providers and their classes.
				'steam' => array(
					'class' => 'SteamOpenIDService',
					//'realm' => '*.example.org',
				),
				'yahoo' => array(
					'class' => 'YahooOpenIDService',
					//'realm' => '*.example.org',
				),
				'wargaming' => array(
					'class' => 'WargamingOpenIDService'
				),
				'twitter' => array(
					// register your app here: https://dev.twitter.com/apps/new
					'class' => 'TwitterOAuthService',
					'key' => '...',
					'secret' => '...',
				),
				'google_oauth' => array(
					// register your app here: https://code.google.com/apis/console/
					'class' => 'GoogleOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
					'title' => 'Google (OAuth)',
				),
				'yandex_oauth' => array(
					// register your app here: https://oauth.yandex.ru/client/my
					'class' => 'YandexOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
					'title' => 'Yandex (OAuth)',
				),
				'facebook' => array(
					// register your app here: https://developers.facebook.com/apps/
					'class' => 'FacebookOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
				),
				'linkedin' => array(
					// register your app here: https://www.linkedin.com/secure/developer
					'class' => 'LinkedinOAuthService',
					'key' => '...',
					'secret' => '...',
				),
				'github' => array(
					// register your app here: https://github.com/settings/applications
					'class' => 'GitHubOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
				),
				'live' => array(
					// register your app here: https://manage.dev.live.com/Applications/Index
					'class' => 'LiveOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
				),
				'vkontakte' => array(
					// register your app here: https://vk.com/editapp?act=create&site=1
					'class' => 'VKontakteOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
				),
				'mailru' => array(
					// register your app here: http://api.mail.ru/sites/my/add
					'class' => 'MailruOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
				),
				'moikrug' => array(
					// register your app here: https://oauth.yandex.ru/client/my
					'class' => 'MoikrugOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
				),
				'odnoklassniki' => array(
					// register your app here: http://dev.odnoklassniki.ru/wiki/pages/viewpage.action?pageId=13992188
					// ... or here: http://www.odnoklassniki.ru/dk?st.cmd=appsInfoMyDevList&st._aid=Apps_Info_MyDev
					'class' => 'OdnoklassnikiOAuthService',
					'client_id' => '...',
					'client_public' => '...',
					'client_secret' => '...',
					'title' => 'Odnokl.',
				),
				'dropbox' => array(
					// register your app here: https://www.dropbox.com/developers/apps/create
					'class' => 'DropboxOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
				),
				'eve' => array(
					// register your app here: https://developers.eveonline.com/applications
					'class' => 'EveOnlineOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
				),
				'slack' => array(
					// register your app here: https://api.slack.com/applications/new
					'class' => 'SlackOAuthService',
					'client_id' => '...',
					'client_secret' => '...',
					'title' => 'Slack',
				),

			),
		),
		...
	),
...

Usage

Demo project

The source code of the demo is available here.

Basic setup

The action


...
	public function actionLogin() {
		$serviceName = Yii::app()->request->getQuery('service');
		if (isset($serviceName)) {
			/** @var $eauth EAuthServiceBase */
			$eauth = Yii::app()->eauth->getIdentity($serviceName);
			$eauth->redirectUrl = Yii::app()->user->returnUrl;
			$eauth->cancelUrl = $this->createAbsoluteUrl('site/login');

			try {
				if ($eauth->authenticate()) {
					//var_dump($eauth->getIsAuthenticated(), $eauth->getAttributes());
					$identity = new EAuthUserIdentity($eauth);

					// successful authentication
					if ($identity->authenticate()) {
						Yii::app()->user->login($identity);
						//var_dump($identity->id, $identity->name, Yii::app()->user->id);exit;

						// special redirect with closing popup window
						$eauth->redirect();
					}
					else {
						// close popup window and redirect to cancelUrl
						$eauth->cancel();
					}
				}

				// Something went wrong, redirect to login page
				$this->redirect(array('site/login'));
			}
			catch (EAuthException $e) {
				// save authentication error to session
				Yii::app()->user->setFlash('error', 'EAuthException: '.$e->getMessage());

				// close popup window and redirect to cancelUrl
				$eauth->redirect($eauth->getCancelUrl());
			}
		}

		// default authorization code through login/password ..
	}

The view

'.Yii::app()->user->getFlash('error').'
'; } ?> ...

Do you already have an account on one of these sites? Click the logo to log in with it here:

widget('ext.eauth.EAuthWidget', array('action' => 'site/login')); ?>">

	if (Yii::app()->user->hasFlash('error')) {
		echo '
'.Yii::app()->user->getFlash('error').'
'
; } ?> ... <h2>Do you already have an account on one of these sites? Click the logo to log in with it here:h2> $this->widget('ext.eauth.EAuthWidget', array('action' => 'site/login')); ?>

Getting more user data (optional)

To receive all the necessary data to your application, you can override the base class of any provider. Base classes are stored in protected/extensions/eauth/services/. Examples of extended classes can be found in protected/extensions/eauth/custom_services/.

After overriding the base class, you need to modify your configuration file to set new name of the class. Also you may need to override the EAuthUserIdentity class to store additional data.

Translations (optional)

  • Copy the file /protected/extensions/eauth/messages/[lang]/eauth.php to /protected/messages/[lang]/eauth.php to translate the EAuth extension into other languages.
  • To add a new language, you can use the blank file /protected/extensions/eauth/messages/blank/eauth.php.

License

Some time ago I developed this extension for LiStick.ru and I still support the extension.

The extension was released under the New BSD License, so you'll find the latest version on GitHub.

Comments
  • Просьба добавить возможность получения email пользователя из: FaceBook, ВКонтакте, Одноклассники, Mail.ru.

    Просьба добавить возможность получения email пользователя из: FaceBook, ВКонтакте, Одноклассники, Mail.ru.

    Здравствуйте,

    Огромная просьба добавить возможность получения не только id пользователя, но и email из сервисов:

    FaceBook, ВКонтакте, Одноклассники, Mail.ru.

    Очень нужно!

    Вот примеры кодов как это можно сделать:

    FaceBook: http://ruseller.com/lessons.php?rub=37&id=1670 ВКонтакте: http://ruseller.com/lessons.php?rub=37&id=1659 Одноклассники: http://ruseller.com/lessons.php?rub=37&id=1661 Mail.ru: http://ruseller.com/lessons.php?rub=37&id=1663

    P.S.: Огромное вам спасибо за ваше расширение!

    opened by AutoWebOffice 19
  • VKontakte

    VKontakte

    По прежнему не работает вход через Vkontakte Хотя файлы я обновил. На демо сайте http://nodge.ru/yii-eauth/demo/login тоже не работает ( UPD: Всё прекрассно работает. Необходимо было внести изменения не только в файле "VKontakteOAuthService" но и в "EAuthServiceBase".

    Большое спасибо за оперативность!

    opened by AndreyGo 8
  • twitter bug?

    twitter bug?

    Расширение не авторизует с помощью твиттера. $authIdentity = Yii::app()->eauth->getIdentity($service); $authIdentity->authenticate(); // false Покопался чуть глубже: Desktop applications only support the oauth_callback value 'oob' Я в чем то ошибся?

    opened by vaseninm 8
  • Call to a member function getServices()

    Call to a member function getServices()

    Приветствую! все делал по инструкции получаю Call to a member function getServices() on a non-object in C:\wamp\www\my\protected\extensions\eauth\EAuthWidget.php on line 56

    $this->services = $component->getServices();

    opened by Deniskore 7
  • Использование собственного представления для редиректа

    Использование собственного представления для редиректа

    Появилась необходимость использовать собственное представления без редиректа родительского окна.

    Добавился один новый метод EAuth::setRedirectView($view) который может принимать псевдоним к представлению, что дает возможность использовать свой js код.

    opened by DenysMedvid 7
  • данные пользователя.

    данные пользователя.

    Доброго времени суток, прошу прощения что возможно задаю совсем глупые вопросы, просто только начинаю писать на yii. прикрутил данное расширение, настроил, авторизация прекрасно проходит, но как достать данные пользователя чтобы записать данные в таблицу. написал костыль для openid который создавал модель сразу после прохождения аутентификации в EOpenIDService, но с oauth мой способ не прокатил. заранее огромное спасибо за разьяснения. )

    opened by LyriD 7
  • Twitter Callback URL

    Twitter Callback URL

    Отличное расширение. Спасибо! Хотел бы узнать о возможности дополнить функционал расширения, что бы изменять Callback URL для Twitter (что бы использовать текущий домен приложения).

    Не знаю, на сколько поможет, нашел статью: http://milindshakya.tumblr.com/post/4208580364/overriding-twitters-default-callback-url-using-oauth

    Сейчас пытаюсь встроить ваше расширение в проект, почему-то твиттер отказывается работать (в попапе выполняется редирект снова на страницу авторизации без всяких сообщений).

    PS: Почему не выкладываете в каталог расширений на сайте фреймворка?

    opened by Borales 7
  • Псевдоним

    Псевдоним "ext.eauth.EAuthWidget" неверен.

    Решил обновить до последней версии и вот

    CException

    Псевдоним "ext.eauth.EAuthWidget" неверен. Убедитесь, что он указывает на существующий PHP файл.

    widget('ext.eauth.EAuthWidget', array('action' => 'site/login')); ?>

    Все делал строго по readmy

    opened by trading-developer 6
  • Странный ответ твиттера

    Странный ответ твиттера

    Twitter выдает вот такой ответ

    Invalid response http code: 410. {url} {"errors": [{"message": "The Twitter REST API v1 will soon stop functioning. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.", "code": 68}]}

    opened by vitovtnet 5
  • preserve redirect_uri for token access

    preserve redirect_uri for token access

    Подробности тут: http://habrahabr.ru/post/150756/

    Основной смысл в том, что redirect_uri нужно проталкивать и в запрос токена, имея код. В проекте такой функционал уже реализован для Фейсбука, имхо его надо вытащить в базовый OAuth2 класс.

    Плюс проблема, описанная в https://github.com/Nodge/yii-eauth/pull/22 связана именно с этим — для зарегистрированных до этого фикса приложений ВК отдает токен, одновременно говоря:

    • если redirect_uri нет, то "надо указать redirect_uri"
    • если redirect_uri есть, но не совпадает, то "redirect_uri не совпадает, не стоит логинить этого человека"

    Если redirect_uri есть в запросе токена и он правильный — поля error, описанного в указанном пулл-реквесте — нет.

    opened by ramm 5
  • Изменения в компоненте и виджете.

    Изменения в компоненте и виджете.

    • Добавлен параметр cacheExpire к EAuth задающий время жизни кэша, по умолчанию вечно как и раньше.
    • Добавлен параметр useCache к EAuth указывающий использовать ли кэш в методе EAuth::getServices(). По умолчанию включен.
    • условие !isset($services) было вечно истенно так как Yii::app()->cache->get() вернет найденные данные или FALSE, согласно документации Yii.
    • Добавлено новый параметр predefinedServices к EAuthWidget. Если параметр не задан, поведение остается прежним. Параметр определяет какие именно сервисы нужно выводить. Создан на тот случай если необходим динамический набор сервисов. Это может быть если список сервисов настраивается в каких-то настройках приложения и одни можно включить, а другие выключить.
    • Заменен старый домен vkontakte.ru на новый vk.com
    • Создан CustomFacebookService для получения более детальное информации о пользователе.
    opened by DenysMedvid 5
  • Dependence itmages/yii-eoauth abandoned

    Dependence itmages/yii-eoauth abandoned

    Hi all.

    The library itmages/yii-eoauth was abandoned and when installing/updating this package, through composer, we got the following error:

    Installing itmages/yii-eoauth (1.0.2): Downloading (failed) Failed to download itmages/yii-eoauth from dist: The "https://api.github.com/repos/itmages/yii-eoauth/zipball/702f8b8b0d4128de1ead9f37b3ff700ef0ef75a9" file could not be downloaded (HTTP/1.1 404 Not Found)

    Thank you.

    opened by SammDev1 4
  • Вконтакте стал возвращать ошибку v version is required

    Вконтакте стал возвращать ошибку v version is required

    Вконтакте стал возвращать ошибку v version is required. У них на сайте написано, что нужно передавать номер версии. Поправил чуток - передаю номер 3.0

    Но там же у них написано следующее:

    Мы не рекомендуем использовать в запросах номера версий ниже 5.0, поскольку старые версии (включая 3.0 и 4.0) в будущем перестанут поддерживаться.

    Планируется обновление провайдера вк в будущем?

    opened by kur1977 5
  • Google plus login

    Google plus login

    i am using this extension for social login but google plus not working for me..i set this parameters in main.php under config

    'client_id' => '887395749182-acjpl9n460qn2pr8pa28ppjsitgeeotp.apps.googleusercontent.com', 'client_secret' => 'Z6KTyp4Z_Z5EcEClqZjXWJVI',

    when i click into google plus for login it gives me error

    Unable to resolve the request "login/google_oauth".

    plz help me out as soon as possible.. my mail id is : [email protected]

    opened by neetasoni 0
  • An error after facebook authorization

    An error after facebook authorization

    I'm getting an error after authorization via Facebook: Undefined index: link in ...../vendor/nodge/yii2-eauth/src/services/FacebookOAuth2Service.php at line 55

    As I understood this is because the settings of my facebook application, but I can't find such option. Can you help me? I think it will be useful to write about setting your extension needs in readme file.

    opened by mike-kramer 3
  • OpenID connect

    OpenID connect

    Привет, ищу как реализовать в своем проекте авторизацию через OpenID connect, в частности через Google, который на него перешел. Есть ли возможность через твой экстэншн это реализовать? Если да то есить ли документация по созданию собственного сервиса (у нас внутренняя авторизация между группой сервисов, прыгаем с бубном)

    opened by inoise 0
Releases(1.2.0)
Owner
Maxim Zemskov
Maxim Zemskov
This library extends the 'League OAuth2 Client' library to provide OpenID Connect Discovery support for supporting providers that expose a .well-known configuration endpoint.

OpenID Connect Discovery support for League - OAuth 2.0 Client This library extends the League OAuth2 Client library to provide OpenID Connect Discove

null 3 Jan 8, 2022
Keycloak Web Guard for Laravel allow you authenticate users with Keycloak Server

Keycloak Web Guard for Laravel This packages allow you authenticate users with Keycloak Server. It works on front. For APIs we recommend laravel-keycl

YDigital Media 0 May 20, 2022
Easy integration with OAuth 2.0 service providers.

OAuth 2.0 Client This package provides a base for integrating with OAuth 2.0 service providers. The OAuth 2.0 login flow, seen commonly around the web

The League of Extraordinary Packages 3.4k Dec 31, 2022
PHP library to verify and validate Apple IdentityToken and authenticate a user with Apple ID.

Sign-in with Apple SDK Installation Recommended and easiest way to installing library is through Composer. composer require azimolabs/apple-sign-in-ph

Azimo Labs 79 Nov 8, 2022
PHPoAuthLib provides oAuth support in PHP 7.2+ and is very easy to integrate with any project which requires an oAuth client.

PHPoAuthLib NOTE: I'm looking for someone who could help to maintain this package alongside me, just because I don't have a ton of time to devote to i

David Desberg 1.1k Dec 27, 2022
Laravel wrapper around OAuth 1 & OAuth 2 libraries.

Introduction Laravel Socialite provides an expressive, fluent interface to OAuth authentication with Facebook, Twitter, Google, LinkedIn, GitHub, GitL

The Laravel Framework 5.2k Dec 27, 2022
OAuth 1/2 Provider implementations for chillerlan/php-oauth-core. PHP 7.4+

chillerlan/php-oauth-providers Documentation See the wiki for advanced documentation. Requirements PHP 7.4+ a PSR-18 compatible HTTP client library of

chillerlan 4 Dec 2, 2022
:atom: Social (OAuth1\OAuth2\OpenID\OpenIDConnect) sign with PHP :shipit:

SocialConnect Auth Getting Started :: Documentation :: Demo Open source social sign on PHP. Connect your application(s) with social network(s). Code e

SocialConnect 518 Dec 28, 2022
:atom: Social (OAuth1\OAuth2\OpenID\OpenIDConnect) sign with PHP :shipit:

SocialConnect Auth Getting Started :: Documentation :: Demo Open source social sign on PHP. Connect your application(s) with social network(s). Code e

SocialConnect 458 Apr 1, 2021
Laravel with NTPC OpenID skeleton

這是啥? 本專案已整合了新北市 OpenID 登入,實作了基本身分驗證系統。 本機帳號登入 新北市 OpenID 登入,初次登入時會建立本機帳號,密碼隨機產生 系統需求 PHP 建議使用 8.0.11 以上 使用方式 以下 FOLDER_NAME 自行替換成想要的資料夾名稱 執行 git clone

null 1 Oct 27, 2021
PHP implementation of openid connect-core

OIDC Discovery PHP implementation of https://openid.net/specs/openid-connect-core-1_0.html Install Via Composer $ composer require digitalcz/openid-co

DigitalCz 3 Dec 14, 2022
PHP OpenID Connect Basic Client

PHP OpenID Connect Basic Client A simple library that allows an application to authenticate a user through the basic OpenID Connect flow. This library

Michael Jett 469 Dec 23, 2022
Social (OAuth1\OAuth2\OpenID\OpenIDConnect) sign with PHP

Open source social sign on PHP. Connect your application(s) with social network(s).

SocialConnect 517 Dec 11, 2022
OAuth 2.0 Yii2 Extension

OAuth2.0 Extension for Yii2 framework The following clients are currently supported for authorization: vk.com [register your application] mail.ru [reg

BNViking 2 Apr 5, 2022
Open source social sign on PHP Library. HybridAuth goal is to act as an abstract api between your application and various social apis and identities providers such as Facebook, Twitter and Google.

Hybridauth 3.7.1 Hybridauth enables developers to easily build social applications and tools to engage websites visitors and customers on a social lev

hybridauth 3.3k Dec 23, 2022
This extension expands WSOAuth extension and provide a EveOnline SSO login method

This extension expands WSOAuth extension and provide a EveOnline SSO login method

Raze Soldier 1 Nov 15, 2021
A Collection of Providers for Laravel Socialite

A Collection of Providers for Laravel Socialite Documentation Full documentation for using these providers can be found at the Documentation. Contribu

Socialite Providers 402 Jan 6, 2023
OAuth client integration for Symfony. Supports both OAuth1.0a and OAuth2.

HWIOAuthBundle The HWIOAuthBundle adds support for authenticating users via OAuth1.0a or OAuth2 in Symfony. Note: this bundle adds easy way to impleme

Hardware Info 2.2k Dec 30, 2022
An OAuth 2.0 bridge for Laravel and Lumen [DEPRECATED FOR LARAVEL 5.3+]

OAuth 2.0 Server for Laravel (deprecated for Laravel 5.3+) Note: This package is no longer maintaned for Laravel 5.3+ since Laravel now features the P

Luca Degasperi 2.4k Jan 6, 2023