bezunakarmi/socialite

Laravel 封装 OAuth 1 & OAuth 2 库。

v3.0.6 2017-05-05 14:17 UTC

README

Build Status Total Downloads Latest Stable Version License

简介

Laravel Socialite 提供了一种表达性、流畅的接口,用于与 Facebook、Twitter、Google、LinkedIn、GitHub 和 Bitbucket 进行 OAuth 认证。它处理了几乎所有你不想编写的样板社交认证代码。

我们不接受新的适配器。

如果你使用 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 配置文件中,并应使用 facebooktwitterlinkedingooglegithubbitbucket 等键,具体取决于应用程序所需的提供者。例如

'github' => [
    'client_id' => 'your-github-app-id',
    'client_secret' => 'your-github-app-secret',
    'redirect' => 'http://your-callback-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 方法时,请务必不要传递任何保留关键字,例如 stateresponse_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);