| Русский | English | Español | 中文 | Français | Deutsch |
|---|---|---|---|---|---|
| Русский | English | Español | 已选择 | Français | Deutsch |
yaleksandr89/oauth2-yandex 是面向
league/oauth2-client 的 Yandex ID provider 客户端。
该包实现 OAuth 2.0 Authorization Code Flow、token 获取与刷新, 以及通过 Yandex ID API 加载用户资料。
安装包之前,请先注册 OAuth 应用、配置 Redirect URI, 并选择所需权限:
composer require yaleksandr89/oauth2-yandex<?php
use Yaleksandr\OAuth2\Client\Provider\Yandex;
$provider = new Yandex([
'clientId' => 'fake-yandex-client-id',
'clientSecret' => 'fake-yandex-client-secret',
'redirectUri' => 'https://example.com/oauth/yandex/callback',
]);请将 Client ID 和 Client Secret 保存在配置或环境变量中。
不要将 Client Secret 提交到仓库。
完整的原生示例包含跳转到 Yandex、state 校验、PKCE、
callback 处理、用户资料获取、附加授权参数以及 token 刷新:
在 Symfony 中,该包通过 knpuniversity/oauth2-client-bundle
作为 generic provider 配置。单独的指南包含客户端配置、发起授权、
获取 token 和加载用户资料:
Symfony 与 KnpUOAuth2ClientBundle 集成
详细参考文档说明 Yandex、YandexResourceOwner、
YandexAvatar、YandexPhone 的公共方法,以及
YandexSex 和 YandexAvatarSize enum:
YandexAvatarSize 的值与
Yandex ID 用户信息文档一致。
| PHP case | Yandex 值 | 尺寸 |
|---|---|---|
Size28 |
islands-small |
28×28 |
Size34 |
islands-34 |
34×34 |
Size42 |
islands-middle |
42×42 |
Size50 |
islands-50 |
50×50 |
Size56 |
islands-retina-small |
56×56 |
Size68 |
islands-68 |
68×68 |
Size75 |
islands-75 |
75×75 |
Size84 |
islands-retina-middle |
84×84 |
Size100 |
islands-retina-50 |
100×100 |
Size200 |
islands-200 |
200×200 |
islands-* 是 Yandex 在头像 CDN URL 中使用的内部尺寸标识;
PHP case 名称反映实际图片尺寸。
显示 Yandex ID 响应结构
YandexResourceOwner::toArray() 返回原始响应结构。
以下示例使用虚构数据:
{
"id": "100000000000000",
"login": "ivan.petrov",
"client_id": "0123456789abcdef0123456789abcdef",
"display_name": "Иван Петров",
"real_name": "Иван Петров",
"first_name": "Иван",
"last_name": "Петров",
"sex": "male",
"default_email": "ivan.petrov@example.com",
"emails": ["ivan.petrov@example.com"],
"birthday": "0000-12-23",
"default_avatar_id": "12345/example-avatar-id",
"is_avatar_empty": false,
"default_phone": {
"id": 12345678,
"number": "+79001234567"
},
"psuid": "1.ABCdef.example-user-specific-id"
}响应内容取决于应用获得的权限。生日字段仍为字符串,
并且可能包含未知部分,例如 0000-12-23。
如果这个库解决了您的问题,请在 GitHub 上给仓库点星 — 这样其他开发者 更容易发现该项目。🤘
