Socialite 社会化登录

未匹配的标注
本文档最新版为 10.x,旧版本可能放弃维护,推荐阅读最新版!

Laravel 社会化登录

简介

除了典型的基于表单的认证之外, Laravel 同时提供一种简单便捷的方式授权通过 OAuth providers 使用 Laravel Socialite 。 社会化登录现在支持通过 Facebook、 Twitter、 LinkedIn、 Google、GitHub 和 Bitbucket 授权。

{提示}其他平台的驱动器可以在 Socialite Providers 社区驱动网站查找。

安装

在开始使用社会化登录功能之前,通过 Composer 将 laravel/socialite 包添加到你的项目依赖里面:

 composer require laravel/socialite

配置

使用 Socialite 前,需要先添加上应用程序所使用的 OAuth 服务的凭证。凭证应该保存在配置文件 config/services.php 当中,可使用的键名有 facebooktwitterlinkedingooglegithubbitbucket,要根据你应用程序需要的提供器来确定键名。例如:

'github' => [
    'client_id' => env('GITHUB_CLIENT_ID'),         // 你的 GitHub Client ID
    'client_secret' => env('GITHUB_CLIENT_SECRET'), // 你的 GitHub Client Secret
    'redirect' => 'http://your-callback-url',
],

{tip} 如果 redirect 项的值是个相对路径,它会自动解析为全称 URL 。

路由

接下来,就要对用户认证了!这需要两个路由:一个路由用于把用户重定向到 OAuth 提供器,另一个则用于在认证完成后接收相应提供器的回调请求。可以通过 facade 方式 Socialite 来访问 Socialite:

<?php

namespace App\Http\Controllers\Auth;

use Socialite;

class LoginController extends Controller
{
    /**
     * 重定向用户信息到 GitHub 认证页面。
     *
     * @return \Illuminate\Http\Response
     */
    public function redirectToProvider()
    {
        return Socialite::driver('github')->redirect();
    }

    /**
     * 获取来自 GitHub 返回的用户信息。
     *
     * @return \Illuminate\Http\Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('github')->user();

        // $user->token;
    }
}

redirect 方法会严格地把用户信息发给 OAuth 提供器,同时 user 方法会读取接收到的请求数据,并从该提供器获取该用户的信息。

当然,还需要在你的控制器方法中定义好路由规则:

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();

{note} 当使用 with 方法时,意不要传递保留关键字,比如 stateresponse_type

访问作用域

在重定向用户之前,还可以使用 scopes 方法在请求上添加额外的「作用域」。 该方法会合并所有提供的作用域:

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

你可以使用 setScopes 方法覆盖所有已存在的作用域:

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

无状态认证

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();

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

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

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

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

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

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

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

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/laravel/5.6/soc...

译文地址:https://learnku.com/docs/laravel/5.6/soc...

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
贡献者:4
讨论数量: 0
发起讨论 只看当前版本


暂无话题~