karlhsu / socialite
A OAuth2 authentication tool for international social platforms
v0.1.0-beta
2025-05-27 10:39 UTC
Requires
- php: >=7.4
- ext-json: *
- guzzlehttp/guzzle: ^7.0
Requires (Dev)
- phpstan/phpstan: ^1.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2025-05-27 10:47:04 UTC
README
一个简单易用的 PHP OAuth2.0 社交登录包,支持多个社交平台。
支持的平台
- Discord
- YouTube
- Telegram
安装
composer require karlxu/socialite
配置
在使用之前,你需要在各个社交平台注册应用并获取相应的密钥:
- 访问 Facebook Developers
- 创建新应用
- 获取 App ID 和 App Secret
- 配置 OAuth 重定向 URL
- 访问 Facebook Developers
- 创建新应用
- 添加 Instagram Basic Display 产品
- 获取 App ID 和 App Secret
- 配置 OAuth 重定向 URL
Discord
- 访问 Discord Developer Portal
- 创建新应用
- 获取 Client ID 和 Client Secret
- 配置 OAuth2 重定向 URL
YouTube
- 访问 Google Cloud Console
- 创建新项目
- 启用 YouTube Data API v3
- 创建 OAuth 2.0 客户端 ID
- 获取 Client ID 和 Client Secret
- 配置重定向 URL
Telegram
- 通过 @BotFather 创建新机器人
- 获取 Bot Token
- 配置域名和重定向 URL
权限范围(Scopes)
每个平台都支持自定义权限范围,以下是各平台支持的权限:
email
- 访问用户的邮箱地址public_profile
- 访问用户的公开资料user_friends
- 访问用户的好友列表user_posts
- 访问用户的帖子user_photos
- 访问用户的照片user_videos
- 访问用户的视频
user_profile
- 访问用户的基本资料user_media
- 访问用户的媒体内容
Discord
identify
- 访问用户的基本信息email
- 访问用户的邮箱地址guilds
- 访问用户的服务器列表guilds.join
- 允许机器人将用户添加到服务器
YouTube
https://www.googleapis.com/auth/youtube.readonly
- 只读访问 YouTube 数据https://www.googleapis.com/auth/userinfo.email
- 访问用户邮箱https://www.googleapis.com/auth/userinfo.profile
- 访问用户资料https://www.googleapis.com/auth/youtube.force-ssl
- 完全访问 YouTube 数据
Telegram
user
- 访问用户的基本信息
使用示例
基本使用
use Karlxu\Socialite\SocialiteManager; $config = [ 'facebook' => [ 'client_id' => 'your-facebook-client-id', 'client_secret' => 'your-facebook-client-secret', 'redirect' => 'http://localhost/callback', 'scopes' => ['email', 'public_profile'], ], 'instagram' => [ 'client_id' => 'your-instagram-client-id', 'client_secret' => 'your-instagram-client-secret', 'redirect' => 'http://localhost/callback', 'scopes' => ['user_profile', 'user_media'], ], 'discord' => [ 'client_id' => 'your-discord-client-id', 'client_secret' => 'your-discord-client-secret', 'redirect' => 'http://localhost/callback', 'scopes' => ['identify', 'email'], ], 'youtube' => [ 'client_id' => 'your-youtube-client-id', 'client_secret' => 'your-youtube-client-secret', 'redirect' => 'http://localhost/callback', 'scopes' => [ 'https://www.googleapis.com/auth/youtube.readonly', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile' ], ], 'telegram' => [ 'client_id' => 'your-telegram-client-id', 'client_secret' => 'your-telegram-client-secret', 'redirect' => 'http://localhost/callback', 'scopes' => ['user'], ], ]; $socialite = new SocialiteManager($config);
重定向到授权页面
// 重定向到 Facebook 授权页面 $url = $socialite->driver('facebook')->redirect(); header('Location: ' . $url); // 重定向到 Instagram 授权页面 $url = $socialite->driver('instagram')->redirect(); header('Location: ' . $url); // 重定向到 Discord 授权页面 $url = $socialite->driver('discord')->redirect(); header('Location: ' . $url); // 重定向到 YouTube 授权页面 $url = $socialite->driver('youtube')->redirect(); header('Location: ' . $url); // 重定向到 Telegram 授权页面 $url = $socialite->driver('telegram')->redirect(); header('Location: ' . $url);
处理回调
// 处理 Facebook 回调 $user = $socialite->driver('facebook')->userFromCode($_GET['code']); echo $user->getId(); // 用户 ID echo $user->getName(); // 用户名称 echo $user->getEmail(); // 用户邮箱 echo $user->getAvatar(); // 用户头像 echo $user->getNickname(); // 用户昵称 print_r($user->getRaw()); // 原始数据 // 处理 Instagram 回调 $user = $socialite->driver('instagram')->userFromCode($_GET['code']); echo $user->getId(); // 用户 ID echo $user->getNickname(); // 用户昵称 echo $user->getName(); // 用户名称 print_r($user->getRaw()); // 原始数据 // 处理 Discord 回调 $user = $socialite->driver('discord')->userFromCode($_GET['code']); echo $user->getId(); // 用户 ID echo $user->getNickname(); // 用户昵称 echo $user->getName(); // 用户名称 echo $user->getEmail(); // 用户邮箱 echo $user->getAvatar(); // 用户头像 echo $user->getRaw()['discriminator']; // 用户标识符 echo $user->getRaw()['verified']; // 是否已验证 // 处理 YouTube 回调 $user = $socialite->driver('youtube')->userFromCode($_GET['code']); echo $user->getId(); // 用户 ID echo $user->getName(); // 用户名称 echo $user->getEmail(); // 用户邮箱 echo $user->getAvatar(); // 用户头像 echo $user->getRaw()['channel_id']; // 频道 ID echo $user->getRaw()['channel_title']; // 频道标题 echo $user->getRaw()['subscriber_count']; // 订阅者数量 echo $user->getRaw()['video_count']; // 视频数量 // 处理 Telegram 回调 $user = $socialite->driver('telegram')->userFromCode($_GET['code']); echo $user->getId(); // 用户 ID echo $user->getNickname(); // 用户昵称 echo $user->getName(); // 用户名称 echo $user->getAvatar(); // 用户头像 echo $user->getRaw()['auth_date']; // 认证时间 echo $user->getRaw()['hash']; // 认证哈希
使用访问令牌
// 使用访问令牌获取用户信息 $user = $socialite->driver('facebook')->userFromToken('access-token');
高级用法
自定义 HTTP 客户端
use GuzzleHttp\Client; $client = new Client([ 'timeout' => 5.0, 'verify' => false, ]); $socialite->driver('facebook')->setHttpClient($client);
自定义作用域
// 设置 Facebook 作用域 $socialite->driver('facebook')->scopes(['email', 'public_profile']); // 设置 Instagram 作用域 $socialite->driver('instagram')->scopes(['user_profile', 'user_media']); // 设置 Discord 作用域 $socialite->driver('discord')->scopes(['identify', 'email']); // 设置 YouTube 作用域 $socialite->driver('youtube')->scopes(['https://www.googleapis.com/auth/youtube.readonly']);
测试
composer test
贡献
欢迎提交 Pull Request 或创建 Issue。
许可证
MIT