ronappleton / socialiser
扩展Laravels Socialite,添加额外的提供者和使用
Requires
- php: >=5.4.0
- guzzlehttp/guzzle: ~6.0
- illuminate/contracts: ~5.4
- illuminate/http: ~5.4
- illuminate/support: ~5.4
- league/oauth1-client: ~1.0
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0|~5.0
This package is auto-updated.
Last update: 2024-09-21 22:43:34 UTC
README
介绍
Socialiser是Laravel Socialite的重构,它提供了一种表达性、流畅的接口来进行OAuth身份验证,支持Facebook、Instagram、Twitter、Google、YouTube、LinkedIn、GitHub和Bitbucket。它几乎处理了你所憎恶的所有样板化社交认证代码。
这种Socialite的改编进一步增加了控制器、单独的配置、迁移和社交数据的存储,以便将社交服务快速集成到您的应用程序中。如果使用Laravel版本5.5+,您可以要求此包并链接您的按钮,Socialiser将负责注册和连接到您选择的社会服务,存储您的社交数据。
实际上,如果您打算存储社交数据,您唯一需要执行的手动步骤是运行Artisan命令
php artisan socialiser:migrate
**注意:**如果您想通过社交数据将您的用户关联起来,请在config/socialiser中打开配置文件并设置您的完全限定用户模型,例如:App\User。Socialiser将在运行迁移时将外键添加回用户ID。用户模型的名称无关紧要,用户表的名称也是如此,只需设置完全限定用户模型,Socialiser就会找到您的用户表。您还可以在配置文件中设置主键列,如果留空,Socialiser将假设按照Laravel标准使用'id'。您实际上可以在配置文件中设置模型、表和ID列名称。
Socialiser还将添加自己的路由
socialiser/login/{provider}
socialiser/login/{provider}/callback
socialiser/connect/{provider}
socialiser/connect/{provider}/callback
这些是我们能够开箱即用的原因(除了获取API密钥)。
我们通过登录和连接的分离来限制我们可以注册或连接到的服务,这些可以在config文件夹中的socialiser.php文件中设置。
此外,您还可以在配置文件中设置您正在使用的完全限定用户模型,以便Socialiser迁移可以添加外键,即socialiser_provider_user
我们不接受新的适配器。
如果您使用Laravel 5.3或更低版本,请使用Socialite 2.0。
其他平台适配器列表可在社区驱动的Socialite Providers网站上找到。
许可证
Laravel Socialite是开源软件,许可协议为MIT许可证
官方文档
除了典型的基于表单的身份验证外,Laravel还提供了一个简单、方便的方法,使用Laravel Socialite通过OAuth提供者进行身份验证。Socialite目前支持与Facebook、Twitter、LinkedIn、Google、GitHub和Bitbucket的身份验证。
要开始使用Socialite,请使用Composer将包添加到项目依赖项
composer require laravel/socialite
配置
在安装Socialite库后,将Laravel\Socialite\SocialiteServiceProvider
注册到您的config/app.php
配置文件中
'providers' => [ // Other service providers... Laravel\Socialite\SocialiteServiceProvider::class, ],
此外,将Socialite
外观添加到您的app
配置文件中的aliases
数组中
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
您还需要添加应用程序使用的OAuth服务的凭据。这些凭据应放置在您的config/services.php
配置文件中,并使用键facebook
、twitter
、linkedin
、google
、github
或bitbucket
,具体取决于应用程序需要的提供者。例如
'github' => [ 'client_id' => 'your-github-app-id', 'client_secret' => 'your-github-app-secret', 'redirect' => 'http://your-callback-url', ],
如果redirect
选项包含相对路径,它将自动解析为完全限定的URL。
基本用法
接下来,您已准备好验证用户!您需要两个路由:一个用于将用户重定向到OAuth提供商,另一个用于接收认证后提供商的回调。我们将使用 Socialite
门面来访问Socialite。
<?php namespace App\Http\Controllers\Auth; use Socialite; class LoginController extends Controller { /** * Redirect the user to the GitHub authentication page. * * @return Response */ public function redirectToProvider() { return Socialite::driver('github')->redirect(); } /** * Obtain the user information from GitHub. * * @return Response */ public function handleProviderCallback() { $user = Socialite::driver('github')->user(); // $user->token; } }
redirect
方法负责将用户发送到OAuth提供商,而 user
方法将读取传入的请求并从提供商检索用户信息。在重定向用户之前,您还可以使用 scopes
方法在请求中添加额外的“作用域”。此方法将合并所有现有作用域和您提供的作用域。
return Socialite::driver('github') ->scopes(['scope1', 'scope2'])->redirect();
您可以使用 setScopes
方法覆盖所有现有作用域。
return Socialite::driver('github') ->setScopes(['scope1', 'scope2'])->redirect();
当然,您需要定义到控制器方法的路由。
Route::get('login/github', 'Auth\LoginController@redirectToProvider'); Route::get('login/github/callback', 'Auth\LoginController@handleProviderCallback');
许多OAuth提供商支持在重定向请求中包含可选参数。要包含请求中的任何可选参数,请使用关联数组调用 with
方法。
return Socialite::driver('google') ->with(['hd' => 'example.com'])->redirect();
当使用 with
方法时,请小心不要传递任何保留关键字,如 state
或 response_type
。
无状态认证
可以使用 stateless
方法来禁用会话状态验证。当将社交认证添加到API时,这非常有用。
return Socialite::driver('google')->stateless()->user();
检索用户详情
一旦您有了用户实例,您就可以获取更多关于用户的信息。
$user = Socialite::driver('github')->user(); // OAuth Two Providers $token = $user->token; $refreshToken = $user->refreshToken; // not always provided $expiresIn = $user->expiresIn; // OAuth One Providers $token = $user->token; $tokenSecret = $user->tokenSecret; // All Providers $user->getId(); $user->getNickname(); $user->getName(); $user->getEmail(); $user->getAvatar();
从令牌检索用户详情
如果您已经为用户拥有有效的访问令牌,您可以使用 userFromToken
方法检索他们的详细信息。
$user = Socialite::driver('github')->userFromToken($token);