Socialite 社会化登录

Laravel 中文文档 · 2019-01-16 11:56:29

简介

除了典型的基于表单的认证之外, 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 当中,可使用的键名有 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 第二个 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);

点击查看所有 Laravel 中文文档 文章: https://codercto.com/courses/l/3.html

查看所有标签

High Performance JavaScript

High Performance JavaScript

Nicholas C. Zakas / O'Reilly Media / 2010-4-2 / USD 34.99

If you're like most developers, you rely heavily on JavaScript to build interactive and quick-responding web applications. The problem is that all of those lines of JavaScript code can slow down your ......一起来看看 《High Performance JavaScript》 这本书的介绍吧!

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具