alukos/social-auther

我们网站上的社交认证

dev-master 2015-04-10 14:16 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:46:37 UTC


README

SocialAuther - 这是一个PHP库,用于简化通过流行的社交网络和服务在您的网站上实现认证

注意: 以下示例中,配置是为本地服务器设置的

注意: 要使用此库,请连接类自动加载器 require_once 'lib/SocialAuther/autoload.php';

使用方法

通过vk.com进行认证

注意! 如果通过由 $vkAdapter->getAuthUrl() 生成授权链接跳转时,返回结果为 {"error":"invalid_request","error_description":"Security Error"},则需要前往您的vk账户的设置页面。在“您的页面安全”部分,点击“查看活动历史”链接。在打开的窗口中,点击“结束所有会话”,以清除vk缓存。这样,出现的 security_error问题将会解决。

要通过对vk.com的社交网络进行认证,您需要先创建一个新的项目并配置参数:client_idclient_secretredirect_uri

  • 步骤 1. 创建 新的应用程序
    • 名称: "SocialAuther Test"
    • 类型: "网站"
  • 步骤 2. 配置“Open API”部分
    • 网站地址: https:///auth?provider=vk
    • 基本域名: "localhost"
  • 步骤 3. 配置参数 client_idclient_secretredirect_uri
    • client_id - 存在于“应用程序ID”选项中。示例:3078654
    • client_secret - 存在于“安全密钥”选项中。示例:zrCHcmKAcBvblSUIBIwu
    • redirect_uri - 存在于“网站地址”选项中。示例:https:///auth?provider=vk
  • 步骤 4. 使用 SocialAuther.

应用 SocialAuther

<?php

// конфигурация настроек адаптера
$vkAdapterConfig = array(
    'client_id'     => '3078654',
    'client_secret' => 'zrCHcmKAcBvblSUIBIwu',
    'redirect_uri'  => 'https:///auth?provider=vk'
);

// создание адаптера и передача настроек
$vkAdapter = new SocialAuther\Adapter\Vk($vkAdapterConfig);

// передача адаптера в SocialAuther
$auther = new SocialAuther\SocialAuther($vkAdapter);

// аутентификация и вывод данных пользователя или вывод ссылки для аутентификации
if (!isset($_GET['code'])) {
	echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через ВКонтакте</a></p>';
} else {
	if ($auther->authenticate()) {
		if (!is_null($auther->getSocialId()))
			echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';
		
		if (!is_null($auther->getName()))
			echo "Имя пользователя: " . $auther->getName() . '<br />';
		
		if (!is_null($auther->getEmail()))
			echo "Email пользователя: " . $auther->getEmail() . '<br />';
		
		if (!is_null($auther->getSocialPage()))
			echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

		if (!is_null($auther->getSex()))
			echo "Пол пользователя: " . $auther->getSex() . '<br />';

		if (!is_null($auther->getBirthday()))
			echo "День Рождения: " . $auther->getBirthday() . '<br />';

		// аватар пользователя 
		if (!is_null($auther->getAvatar()))
			echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
	}
}

通过odnoklassniki.ru进行认证

要通过对odnoklassniki.ru的社交网络进行认证,您需要先创建一个新的项目并配置参数:client_idclient_secretredirect_uripublic_key

  • 步骤 1. 创建 新的应用程序
    • 选择 "在 Одноклассники 之外"
    • 选择 "oAuth 认证"
  • 步骤 2. 配置应用程序
    • 名称: "SocialAuther Test"
    • shortname: _www.odnoklassniki.ru/game/auther
    • 应用程序链接: https:///auth?provider=odnoklassniki
    • "图片链接" 和 "头像链接": 任何图像的链接
  • 步骤 3. 配置参数 client_idclient_secretredirect_uripublic_key。所有必要信息都将在添加应用程序后发送到您的电子邮箱
    • client_id - 应用程序ID。示例:658606315
    • client_secret - 应用程序安全密钥。示例:C35045020A8C7C066F25C4C7
    • redirect_uri - 应用程序链接。示例:https:///auth?provider=odnoklassniki
    • public_key - 应用程序公开密钥。示例:BAMKABABACADCBBAB
  • 步骤 4. 使用 SocialAuther.

应用 SocialAuther

<?php

$odnoklassnikiConfig = array(
    'client_id'     => '658606315',
    'client_secret' => 'C35045020A8C7C066F25C4C7',
    'redirect_uri'  => 'https:///auth?provider=odnoklassniki',
    'public_key'    => 'BAMKABABACADCBBAB'
);

$odnoklassnikiAdapter = new SocialAuther\Adapter\Odnoklassniki($odnoklassnikiConfig);

$auther = new SocialAuther\SocialAuther($odnoklassnikiAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Одноклассники</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

通过mail.ru进行认证

  • 步骤 1. 创建 新的应用
    • 同意规则
    • 名称: "SocialAuther Test"
    • 主页地址: https:///auth?provider=mailru
  • 步骤 2. 配置应用程序
    • 下载提供的 receiver.html 文件并将其放入项目文件夹
    • 为了在本地服务器上安装,点击“跳过”
  • 步骤 3. 配置参数 client_idclient_secretredirect_uri
    • client_id - ID。例如:670707
    • client_secret - 密钥。例如:a619062972f2073ded61405b8f8eccd2
    • redirect_uri - 主页地址。例如:https:///auth?provider=mailru
  • 步骤 4. 使用 SocialAuther.

应用 SocialAuther

<?php

$mailruAdapterConfig = array(
    'client_id'     => '670707',
    'client_secret' => 'a619062972f2073ded61405b8f8eccd2',
    'redirect_uri'  => 'https:///auth?provider=mailru'
);

$mailruAdapter = new SocialAuther\Adapter\Mailru($mailruAdapterConfig);

$auther = new SocialAuther\SocialAuther($mailruAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Mail.ru</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

通过 Yandex 进行认证

  • 步骤 1. 创建 新的应用
  • 步骤 2. 配置应用程序
    • 名称: "SocialAuther 测试"
    • 权限: "Яндекс.Логин - 电子邮件地址;出生日期;用户名,全名,性别"
    • 回调 URI: https:///auth?provider=yandex
  • 步骤 3. 配置参数 client_idclient_secretredirect_uri
    • client_id - 应用 ID。例如:bff0bfcaef054ab66c0538b39e0a86cf
    • client_secret - 应用密码。例如:219ba88d386b114b9c6abef7eab4e8e4
    • redirect_uri - 回调 URI。例如:https:///auth?provider=yandex
  • 步骤 4. 使用 SocialAuther.

应用 SocialAuther

<?php

$yandexAdapterConfig = array(
    'client_id'     => 'bff0bfcaef054ab66c0538b39e0a86cf',
    'client_secret' => '219ba88d386b114b9c6abef7eab4e8e4',
    'redirect_uri'  => 'https:///auth?provider=yandex'
);

$yandexAdapter = new SocialAuther\Adapter\Yandex($yandexAdapterConfig);

$auther = new SocialAuther\SocialAuther($yandexAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Yandex</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

通过 Google 进行认证

  • 步骤 1. 创建 新的应用
    • 在菜单中选择“API 访问”
    • 点击“创建 OAuth 2.0 Client ID...”按钮
  • 步骤 2. 配置应用程序
    • API 访问: "SocialAuther 测试"
    • 点击“下一步”
    • 应用类型: "Web 应用程序"
    • 您的网站或主机名: localhost/google-auth
    • 点击“创建客户端 ID”
  • 步骤 3. 配置参数 client_idclient_secretredirect_uri
    • client_id - 应用 ID。例如:333739311538.apps.googleusercontent.com
    • client_secret - 应用密码。例如:lZB3aW8UG8gDj6WVIEIcidt5
    • redirect_uri - 回调 URI。例如:https:///auth?provider=google
  • 步骤 4. 使用 SocialAuther.

应用 SocialAuther

<?php

$googleAdapterConfig = array(
    'client_id'     => '393337311853.apps.googleusercontent.com',
    'client_secret' => 'B38WaUlZG8gDI6jIEWVct5id',
    'redirect_uri'  => 'https:///auth?provider=google'
);

$googleAdapter = new SocialAuther\Adapter\Google($googleAdapterConfig);

$auther = new SocialAuther\SocialAuther($googleAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Google</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

通过 Facebook 进行认证

  • 步骤 1. 创建 新的应用
    • 点击“+ 创建新应用”按钮
    • 应用名称: "SocialAuther 测试"
    • 点击“继续”
  • 步骤 2. 配置应用程序
    • 点击“具有 Facebook 登录的网站”
    • 输入 Site URL: https:///auth?provider=facebook
  • 步骤 3. 配置参数 client_idclient_secretredirect_uri
    • client_id - 应用 ID。例如:346158195993388
    • client_secret - 应用密钥。例如:2de1ab376d1c17cd47250920c05ab386
    • redirect_uri - 回调 URI。例如:https:///auth?provider=facebook
  • 步骤 4. 使用 SocialAuther.

应用 SocialAuther

<?php

$facebookAdapterConfig = array(
    'client_id'     => '346158195993388',
    'client_secret' => '2de1ab376d1c17cd47250920c05ab386',
    'redirect_uri'  => 'https:///auth?provider=facebook'
);

$facebookAdapter = new SocialAuther\Adapter\Facebook($facebookAdapterConfig);

$auther = new SocialAuther\SocialAuther($facebookAdapter);

if (!isset($_GET['code'])) {
    echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Facebook</a></p>';
} else {
    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

通过 Twitter 进行认证

注意! 为了正确通过 Twitter 进行认证,服务器上的时间和日期设置应接近实际值。几分钟的误差是可接受的,但较大的偏差可能导致在生成认证 URL 阶段出现问题

  • 步骤 1. 创建 新的应用
    • 名称: "SocialAuther 测试"
    • 描述: "SocialAuther 测试描述"
    • 网站: "https://"
    • 回调 URL: "https://"
  • 步骤 2. 配置参数 client_idclient_secretredirect_uri
    • client_id - API 密钥。例如:ef054ab66c0538b39e0a865cf
    • client_secret - API 密钥。例如:6d6c0538b39e0a86cf219ba88d386b114b9c6abef7eab4e8e4
    • redirect_uri - 回调 URL。例如:https:///auth?provider=twitter
  • 步骤 3. 使用 SocialAuther

应用 SocialAuther

<?php

// конфигурация настроек адаптера
$twiAdapterConfig = array(
    'client_id'     => 'ef054ab66c0538b39e0a865cf',
    'client_secret' => '6d6c0538b39e0a86cf219ba88d386b114b9c6abef7eab4e8e4',
    'redirect_uri'  => 'https:///auth?provider=twitter'
);

// создание адаптера и передача настроек
$twiAdapter = new SocialAuther\Adapter\Twitter($twiAdapterConfig);

// передача адаптера в SocialAuther
$auther = new SocialAuther\SocialAuther($twiAdapter);

// аутентификация и вывод данных пользователя или вывод ссылки для аутентификации
if (!isset($_GET[$auther->getResponseType()]) {
	echo '<p><a href="' . $auther->getAuthUrl() . '">Аутентификация через Twitter</a></p>';
} else {
	if ($auther->authenticate()) {
		if (!is_null($auther->getSocialId()))
			echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';
		
		if (!is_null($auther->getName()))
			echo "Имя пользователя: " . $auther->getName() . '<br />';
		
		if (!is_null($auther->getEmail()))
			echo "Email пользователя: " . $auther->getEmail() . '<br />';
		
		if (!is_null($auther->getSocialPage()))
			echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

		if (!is_null($auther->getSex()))
			echo "Пол пользователя: " . $auther->getSex() . '<br />';

		if (!is_null($auther->getBirthday()))
			echo "День Рождения: " . $auther->getBirthday() . '<br />';

		// аватар пользователя 
		if (!is_null($auther->getAvatar()))
			echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
	}
}

使用 SocialAuther 与多个社交网络和服务

<?php

$adapterConfigs = array(
    'vk' => array(
        'client_id'     => '3078654',
        'client_secret' => 'zrCHcmKAcBvblSUIBIwu',
        'redirect_uri'  => 'https:///auth/?provider=vk'
    ),
    'odnoklassniki' => array(
        'client_id'     => '658606315',
        'client_secret' => 'C35045020A8C7C066F25C4C7',
        'redirect_uri'  => 'https:///auth?provider=odnoklassniki',
        'public_key'    => 'BAMKABABACADCBBAB'
    ),
    'mailru' => array(
        'client_id'     => '670707',
        'client_secret' => 'a619062972f2073ded61405b8f8eccd2',
        'redirect_uri'  => 'https:///auth/?provider=mailru'
    ),
    'yandex' => array(
        'client_id'     => 'bff0bfcaef054ab66c0538b39e0a86cf',
        'client_secret' => '219ba88d386b114b9c6abef7eab4e8e4',
        'redirect_uri'  => 'https:///auth/?provider=yandex'
    ),
    'google' => array(
        'client_id'     => '393337311853.apps.googleusercontent.com',
        'client_secret' => 'B38WaUlZG8gDI6jIEWVct5id',
        'redirect_uri'  => 'https:///auth?provider=google'
    ),
    'facebook' => array(
        'client_id'     => '346158195993388',
        'client_secret' => '2de1ab376d1c17cd47250920c05ab386',
        'redirect_uri'  => 'https:///auth?provider=facebook'
    )
    'twitter' => array(
        'client_id'     => 'ef054ab66c0538b39e0a865cf',
        'client_secret' => '6d6c0538b39e0a86cf219ba88d386b114b9c6abef7eab4e8e4',
        'redirect_uri'  => 'https:///auth?provider=twitter'
    )
);

// создание адаптеров
$adapters = array();
$responses = array();
foreach ($adapterConfigs as $adapter => $settings) {
    $class = 'SocialAuther\Adapter\\' . ucfirst($adapter);
    $adapters[$adapter] = new $class($settings);
    $responses[$adapter] = $adapters[$adapter]->getResponseType();
}

if (!isset($_GET['provider']) 
	|| !array_key_exists($_GET['provider'], $adapters) 
	|| !isset($_GET[$responses[$_GET['provider']]])) {
    foreach ($adapters as $title => $adapter) {
        echo '<p><a href="' . $adapter->getAuthUrl() . '">Аутентификация через ' . ucfirst($title) . '</a></p>';
    }
} else {
    $auther = new SocialAuther\SocialAuther($adapters[$_GET['provider']]);

    if ($auther->authenticate()) {
        if (!is_null($auther->getSocialId()))
            echo "Социальный ID пользователя: " . $auther->getSocialId() . '<br />';

        if (!is_null($auther->getName()))
            echo "Имя пользователя: " . $auther->getName() . '<br />';

        if (!is_null($auther->getEmail()))
            echo "Email пользователя: " . $auther->getEmail() . '<br />';

        if (!is_null($auther->getSocialPage()))
            echo "Ссылка на профиль пользователя: " . $auther->getSocialPage() . '<br />';

        if (!is_null($auther->getSex()))
            echo "Пол пользователя: " . $auther->getSex() . '<br />';

        if (!is_null($auther->getBirthday()))
            echo "День Рождения: " . $auther->getBirthday() . '<br />';

        // аватар пользователя
        if (!is_null($auther->getAvatar()))
            echo '<img src="' . $auther->getAvatar() . '" />'; echo "<br />";
    }
}

变更历史

SocialAuther 1.0

SocialAuther 1.01

  • 新增了通过 Twitter 进行身份验证的功能。
  • 新增了通过 VKонтакте 进行身份验证时获取电子邮件地址的功能。