Socialite 社会化登录

未匹配的标注

Laravel Socialite

简介

除了典型的基于表单的身份验证之外,Laravel 还提供了一种使用 Laravel Socialite 对 OAuth providers 进行身份验证的简单方便的方法。 Socialite 目前支持 Facebook,Twitter,LinkedIn,Google,GitHub,GitLab 和 Bitbucket 的身份验证。

技巧:其他平台的驱动器可以在 Socialite Providers 社区驱动网站查找。

安装

在开始使用 Socialite 之前,通过 Composer 软件包管理器将软件包添加到项目的依赖项中:

composer require laravel/socialite

升级社会化登录

升级到 Socialite 的新主要版本时,请务必仔细查看 the upgrade guide.

配置

在使用 Socialite 之前,您还需要为应用程序使用的 OAuth 服务添加凭据。这些凭证应该放在你的 config/services.php 配置文件中, 并且应该使用 facebook, twitter, linkedin, google, github, gitlab, 或 bitbucket作为键名,取决于您的应用程序所需的提供商。例如:

'github' => [
    'client_id' => env('GITHUB_CLIENT_ID'),
    'client_secret' => env('GITHUB_CLIENT_SECRET'),
    'redirect' => 'http://example.com/callback-url',
],

技巧:如果 redirect 项的值包含一个相对路径,它将会自动解析为全称 URL。

认证

路由

要使用 OAuth 提供程序对用户进行身份验证,你需要两个路由:一个用于将用户重定向到 OAuth provider,另一个用于在身份验证后接收来自 provider 的回调。下面的示例控制器演示了这两个路由的实现:

use Laravel\Socialite\Facades\Socialite;

Route::get('/auth/redirect', function () {
    return Socialite::driver('github')->redirect();
});

Route::get('/auth/callback', function () {
    $user = Socialite::driver('github')->user();

    // $user->token
});

redirect 提供的方法 Socialite facade 负责将用户重定向到 OAuth provider,而该 user 方法将读取传入的请求并在身份验证后从提供程序中检索用户的信息。

可选参数

许多 OAuth providers 支持重定向请求中的可选参数。 要在请求中包含任何可选参数,请使用关联数组调用 with 方法:

use Laravel\Socialite\Facades\Socialite;

return Socialite::driver('google')
    ->with(['hd' => 'example.com'])
    ->redirect();

注意:使用 with 方法时, 注意不要传递任何保留的关键字,例如 stateresponse_type

访问作用域

在重定向用户之前,您还可以使用 scopes 方法在请求中添加其他「作用域」。

use Laravel\Socialite\Facades\Socialite;

return Socialite::driver('github')
    ->scopes(['read:user', 'public_repo'])
    ->redirect();

你可以使用 setScopes 方法覆盖所有现有范围:

return Socialite::driver('github')
    ->setScopes(['read:user', 'public_repo'])
    ->redirect();

检索用户详细信息

在将用户重定向回您的身份验证回调路由之后,您可以使用 Socialite 的 user 方法检索用户的详细信息。user 方法为返回的用户对象提供了各种属性和方法,您可以使用这些属性和方法在您自己的数据库中存储有关该用户的信息。你可以使用不同的属性和方法这取决于要进行身份验证的OAuth提供程序是否支持OAuth 1.0或OAuth 2.0:

Route::get('/auth/callback', function () {
    $user = Socialite::driver('github')->user();

    // OAuth 2.0 providers...
    $token = $user->token;
    $refreshToken = $user->refreshToken;
    $expiresIn = $user->expiresIn;

    // OAuth 1.0 providers...
    $token = $user->token;
    $tokenSecret = $user->tokenSecret;

    // All providers...
    $user->getId();
    $user->getNickname();
    $user->getName();
    $user->getEmail();
    $user->getAvatar();
});

从令牌中检索用户详细信息 (OAuth2)

如果你已经有了一个用户的有效访问令牌,你可以使用 Socialite 的 userFromToken 方法检索其详细信息:

use Laravel\Socialite\Facades\Socialite;

$user = Socialite::driver('github')->userFromToken($token);

从令牌和秘钥中检索用户的详细信息 (OAuth1)

如果你已经有了一对有效的用户令牌/秘钥,你可以使用 Socialite 的 userFromTokenAndSecret 方法检索他们的详细信息:

use Laravel\Socialite\Facades\Socialite;

$user = Socialite::driver('twitter')->userFromTokenAndSecret($token, $secret);

无认证状态

stateless 方法可用于禁用会话状态验证。 这在向 API 添加社交身份验证时非常有用:

use Laravel\Socialite\Facades\Socialite;

return Socialite::driver('google')->stateless()->user();

注意:Twitter 驱动程序不支持无状态身份验证,它使用 OAuth 1.0 进行身份验证

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
上一篇 下一篇
Summer
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
贡献者:3
讨论数量: 0
发起讨论 只看当前版本


暂无话题~