|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- <h1 align="center"> Socialite</h1>
- <p align="center">
- <a href="https://travis-ci.org/overtrue/socialite"><img src="https://travis-ci.org/overtrue/socialite.svg?branch=master" alt="Build Status"></a>
- <a href="https://packagist.org/packages/overtrue/socialite"><img src="https://poser.pugx.org/overtrue/socialite/v/stable.svg" alt="Latest Stable Version"></a>
- <a href="https://packagist.org/packages/overtrue/socialite"><img src="https://poser.pugx.org/overtrue/socialite/v/unstable.svg" alt="Latest Unstable Version"></a>
- <a href="https://scrutinizer-ci.com/g/overtrue/socialite/build-status/master"><img src="https://scrutinizer-ci.com/g/overtrue/socialite/badges/build.png?b=master" alt="Build Status"></a>
- <a href="https://scrutinizer-ci.com/g/overtrue/socialite/?branch=master"><img src="https://scrutinizer-ci.com/g/overtrue/socialite/badges/quality-score.png?b=master" alt="Scrutinizer Code Quality"></a>
- <a href="https://scrutinizer-ci.com/g/overtrue/socialite/?branch=master"><img src="https://scrutinizer-ci.com/g/overtrue/socialite/badges/coverage.png?b=master" alt="Code Coverage"></a>
- <a href="https://packagist.org/packages/overtrue/socialite"><img src="https://poser.pugx.org/overtrue/socialite/downloads" alt="Total Downloads"></a>
- <a href="https://packagist.org/packages/overtrue/socialite"><img src="https://poser.pugx.org/overtrue/socialite/license" alt="License"></a>
- </p>
-
-
- <p align="center">Socialite is an OAuth2 Authentication tool. It is inspired by <a href="https://github.com/laravel/socialite">laravel/socialite</a>, You can easily use it in any PHP project.</p>
-
- # Requirement
-
- ```
- PHP >= 5.6
- ```
- # Installation
-
- ```shell
- $ composer require "overtrue/socialite" -vvv
- ```
-
- # Usage
-
- For Laravel 5: [overtrue/laravel-socialite](https://github.com/overtrue/laravel-socialite)
-
- `authorize.php`:
-
- ```php
- <?php
-
- use Overtrue\Socialite\SocialiteManager;
-
- $config = [
- 'github' => [
- 'client_id' => 'your-app-id',
- 'client_secret' => 'your-app-secret',
- 'redirect' => 'http://localhost/socialite/callback.php',
- ],
- ];
-
- $socialite = new SocialiteManager($config);
-
- $response = $socialite->driver('github')->redirect();
-
- echo $response;// or $response->send();
- ```
-
- `callback.php`:
-
- ```php
- <?php
-
- use Overtrue\Socialite\SocialiteManager;
-
- $config = [
- 'github' => [
- 'client_id' => 'your-app-id',
- 'client_secret' => 'your-app-secret',
- 'redirect' => 'http://localhost/socialite/callback.php',
- ],
- ];
-
- $socialite = new SocialiteManager($config);
-
- $user = $socialite->driver('github')->user();
-
- $user->getId(); // 1472352
- $user->getNickname(); // "overtrue"
- $user->getUsername(); // "overtrue"
- $user->getName(); // "安正超"
- $user->getEmail(); // "anzhengchao@gmail.com"
- $user->getProviderName(); // GitHub
- ...
- ```
-
- ### Configuration
-
- Now we support the following sites:
-
- `facebook`, `github`, `google`, `linkedin`, `outlook`, `weibo`, `taobao`, `qq`, `wechat`, `douyin`, `baidu`, `feishu`, and `douban`.
-
- Each driver uses the same configuration keys: `client_id`, `client_secret`, `redirect`.
-
- Example:
- ```
- ...
- 'weibo' => [
- 'client_id' => 'your-app-id',
- 'client_secret' => 'your-app-secret',
- 'redirect' => 'http://localhost/socialite/callback.php',
- ],
- ...
- ```
-
- ### Scope
-
- Before redirecting the user, you may also set "scopes" on the request using the scope method. This method will overwrite all existing scopes:
-
- ```php
- $response = $socialite->driver('github')
- ->scopes(['scope1', 'scope2'])->redirect();
-
- ```
-
- ### Redirect URL
-
- You may also want to dynamicly set `redirect`,you can use the following methods to change the `redirect` URL:
-
- ```php
- $socialite->redirect($url);
- // or
- $socialite->withRedirectUrl($url)->redirect();
- // or
- $socialite->setRedirectUrl($url)->redirect();
- ```
-
- > WeChat scopes:
- - `snsapi_base`, `snsapi_userinfo` - Used to Media Platform Authentication.
- - `snsapi_login` - Used to web Authentication.
-
- ### Additional parameters
-
- To include any optional parameters in the request, call the with method with an associative array:
-
- ```php
- $response = $socialite->driver('google')
- ->with(['hd' => 'example.com'])->redirect();
- ```
-
- ### User interface
-
- #### Standard user api:
-
- ```php
-
- $user = $socialite->driver('weibo')->user();
- ```
-
- ```json
- {
- "id": 1472352,
- "nickname": "overtrue",
- "name": "安正超",
- "email": "anzhengchao@gmail.com",
- "avatar": "https://avatars.githubusercontent.com/u/1472352?v=3",
- "original": {
- "login": "overtrue",
- "id": 1472352,
- "avatar_url": "https://avatars.githubusercontent.com/u/1472352?v=3",
- "gravatar_id": "",
- "url": "https://api.github.com/users/overtrue",
- "html_url": "https://github.com/overtrue",
- ...
- },
- "token": {
- "access_token": "5b1dc56d64fffbd052359f032716cc4e0a1cb9a0",
- "token_type": "bearer",
- "scope": "user:email"
- }
- }
- ```
-
- You can fetch the user attribute as a array keys like these:
-
- ```php
- $user['id']; // 1472352
- $user['nickname']; // "overtrue"
- $user['name']; // "安正超"
- $user['email']; // "anzhengchao@gmail.com"
- ...
- ```
-
- Or using the method:
-
- ```php
- $user->getId();
- $user->getNickname();
- $user->getName();
- $user->getEmail();
- $user->getAvatar();
- $user->getOriginal();
- $user->getToken();// or $user->getAccessToken()
- $user->getProviderName(); // GitHub/Google/Facebook...
- ```
-
- #### Get original response from OAuth API
-
- The `$user->getOriginal()` method will return an array of the API raw response.
-
- #### Get access token Object
-
- You can get the access token instance of current session by call `$user->getToken()` or `$user->getAccessToken()` or `$user['token']` .
-
-
- ### Get user with access token
-
- ```php
- $accessToken = new AccessToken(['access_token' => $accessToken]);
- $user = $socialite->user($accessToken);
- ```
-
-
- ### Custom Session or Request instance.
-
- You can set the request with your custom `Request` instance which instanceof `Symfony\Component\HttpFoundation\Request` before you call `driver` method.
-
-
- ```php
-
- $request = new Request(); // or use AnotherCustomRequest.
-
- $socialite = new SocialiteManager($config, $request);
- ```
-
- Or set request to `SocialiteManager` instance:
-
- ```php
- $socialite->setRequest($request);
- ```
-
- You can get the request from the `SocialiteManager` instance by `getRequest()`:
-
- ```php
- $request = $socialite->getRequest();
- ```
-
- #### Set custom session manager.
-
- By default, the `SocialiteManager` uses the `Symfony\Component\HttpFoundation\Session\Session` instance as session manager, you can change it as follows:
-
- ```php
- $session = new YourCustomSessionManager();
- $socialite->getRequest()->setSession($session);
- ```
-
- > Your custom session manager must be implement the [`Symfony\Component\HttpFoundation\Session\SessionInterface`](http://api.symfony.com/3.0/Symfony/Component/HttpFoundation/Session/SessionInterface.html).
-
- Enjoy it! :heart:
-
- # Reference
-
- - [Google - OpenID Connect](https://developers.google.com/identity/protocols/OpenIDConnect)
- - [Facebook - Graph API](https://developers.facebook.com/docs/graph-api)
- - [Linkedin - Authenticating with OAuth 2.0](https://developer.linkedin.com/docs/oauth2)
- - [微博 - OAuth 2.0 授权机制说明](http://open.weibo.com/wiki/%E6%8E%88%E6%9D%83%E6%9C%BA%E5%88%B6%E8%AF%B4%E6%98%8E)
- - [QQ - OAuth 2.0 登录QQ](http://wiki.connect.qq.com/oauth2-0%E7%AE%80%E4%BB%8B)
- - [微信公众平台 - OAuth文档](http://mp.weixin.qq.com/wiki/9/01f711493b5a02f24b04365ac5d8fd95.html)
- - [微信开放平台 - 网站应用微信登录开发指南](https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN)
- - [微信开放平台 - 代公众号发起网页授权](https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318590&token=&lang=zh_CN)
- - [豆瓣 - OAuth 2.0 授权机制说明](http://developers.douban.com/wiki/?title=oauth2)
- - [抖音 - 网站应用开发指南](http://open.douyin.com/platform/doc)
- - [飞书 - 授权说明](https://open.feishu.cn/document/ukTMukTMukTM/uMTNz4yM1MjLzUzM)
-
- ## PHP 扩展包开发
-
- > 想知道如何从零开始构建 PHP 扩展包?
- >
- > 请关注我的实战课程,我会在此课程中分享一些扩展开发经验 —— [《PHP 扩展包实战教程 - 从入门到发布》](https://learnku.com/courses/creating-package)
-
- # License
-
- MIT
|