smallhadroncollider / social-login
此包已被弃用且不再维护。未建议替代包。
一个简化API中心化PHP应用程序社交登录的包
0.6.3
2015-09-22 12:53 UTC
Requires
- php: >=5.5.0
- league/oauth1-client: ~1.6
- league/oauth2-client: ~1.0
- league/oauth2-facebook: ~1.0
- league/oauth2-linkedin: 0.4.*
Requires (Dev)
- mockery/mockery: 0.9.*
This package is not auto-updated.
Last update: 2020-07-08 15:47:30 UTC
README
Laravel Socialite 非常好。但它不是针对 API中心化 PHP应用程序而设计的:它依赖于会话(无状态API将缺少)和特定的 GET
参数(可能不理想)。
社交登录包旨在简化在具有OAuth 2受保护API的应用程序中添加社交登录的过程。
使用OAuth 2 API的典型用法
- 客户端:生成会话并从API请求授权URL
/* * GET https://mysite.com/login */ // start a session session_start(); $sessionID = session_id(); // get the list of supported social login urls $urls = $http->get("https://api.mysite.com/v1/auth/social/urls", [ "session_id" => $sessionID, ]);
- API:使用会话ID创建新的
SocialLogin
实例
/* * GET https://api.mysite.com/v1/auth/social/urls */ use SmallHadronCollider\SocialLogin\SocialLogin; use SmallHadronCollider\SocialLogin\Storers\MemcachedStorer; $config = [ "facebook" => [ "client_id" => "1", "client_secret" => "secret", "redirect_url" => "https://mysite.com/login/social?platform=facebook", ], ]; $storer = new MemcachedStorer(); $login = new SocialLogin($config, $storer); $login->setSessionID($_GET["session_id"]); return json_encode($login->getAuthUrls());
- 客户端:将用户发送到第三方授权页面
/* * GET https://mysite.com/login */ <a href="<?= $urls["facebook"] ?>">Login With Facebook</a>
- 客户端:获取返回重定向的授权码
/* * GET https://mysite.com/login/social?platform=facebook&code=blahblahblah&state=rhubarbrhubarb */ $code = $_GET["code"]; $state = $_GET["state"]; $userDetails = $http->post("https://api.mysite.com/v1/auth/social", [ "code" => "{$code}:{$state}", "platform" => $_GET["platform"], "session_id" => $sessionID, ]);
- API:使用授权码请求用户
/* * POST https://api.mysite.com/v1/auth/social */ // Setup SocialLogin as before... (see above) $login = (new SocialLogin($config, $storer))->setSessionID($_POST["session_id"]); $code = $_POST["code"]; $platform = $login->platform($_POST["platform"]); $token = $platform->getTokenFromCode($code); $user = $platform->getUserFromToken($code);
- API:检查用户是否存在于用户数据库中
- 如果用户不存在,则创建用户
/* * POST https://api.mysite.com/v1/auth/social */ if (/* user does not exist in database */) { // Create a new user from // $user->id, $user->name, $user->email } if (/* user in database has different social id to logged in user */) { // return a 401 page }
- API:返回带有平台前缀的用户ID和令牌
/* * POST https://api.mysite.com/v1/auth/social */ return json_encode([ "user_id" => $user->id, "token" => $platform->addPlatform($token), ]);
- 客户端:使用登录详情授权用户
/* * GET https://mysite.com/login/social?platform=facebook&code=blahblahblah&state=rhubarbrhubarb */ $loggedIn = $http->post("https://api.mysite.com/v1/auth", [ "client_id" => "oauthclientid", "client_secret" => "blahblahblah", "grant_type" => "password", "username" => $userDetails->user_id, "password" => $userDetails->token, ]);
- API:检查用户名是否与存储的会话ID相匹配
/* * POST https://api.mysite.com/v1/auth */ function checkUserLoggedIn($username, $password) { if (/* $user using social login */) { $login = new SocialLogin($config, $storer); $platform = $login->platformFromToken($token); $token = $platform->stripPlatform($token); $user = $platform->getUserFromToken($token); if ($username === $user->id) { return true; } return false; } else { // Login normally (e.g. check the password) } }
许可证
MIT许可证 (MIT)
版权所有 (c) 2015 小型强子对撞机
特此授予任何获得此软件及其相关文档副本(“软件”)的人,免费使用软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许将软件提供给他人以便他们这样做,前提是符合以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的的适用性和非侵权性。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,无论此类责任是基于合同、侵权或其他方式,源于、因或与软件或软件的使用或其他交易有关。