Socialite 社会化登录

更新时间: 2019-07-31 20:15

简介

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

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

安装

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

composer require laravel/socialite

配置

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

'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 方法时,意不要传递保留关键字,比如 state 或 response_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 第二个 Providers
$token = $user->token;
$refreshToken = $user->refreshToken; // 并不总是提供
$expiresIn = $user->expiresIn;

// OAuth 第一个 Providers
$token = $user->token;
$tokenSecret = $user->tokenSecret;

// 所有的 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);
Probability and Computing

Probability and Computing

Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00

Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!

CSS 压缩/解压工具

CSS 压缩/解压工具

在线压缩/解压 CSS 代码

SHA 加密

SHA 加密

SHA 加密工具

HEX HSV 转换工具

HEX HSV 转换工具

HEX HSV 互换工具