教程 > laravel 教程 > 阅读:40

laravel socialite——迹忆客-ag捕鱼王app官网

简介

除了传统的基于表单的登录认证外,laravel 还可以通过 laravel socialite 提供 oauth 认证,目前支持的认证驱动包括 facebook、twitter、google、linkedin、github 和 bitbucket。

注:其他平台的驱动可以在社区驱的 socialite 提供者网站上找到。


升级 socialite

升级到最新版本的 socialite 时,需要仔细阅读升级指南。


安装

要使用 socialite,首先需要通过 composer 安装扩展包:

$ composer require laravel/socialite

配置

在使用 socialite 之前,还需要为应用用到的 oauth 服务添加认证信息,这些认证信息位于配置文件 config/services.php,而且对应 key 必须为facebooktwitterlinkedingooglegithubgitlabbitbucket,配置哪些 key 取决于应用需要的提供者。例如:

'github' => [
    'client_id' => env('github_client_id'),         // your github client id
    'client_secret' => env('github_client_secret'), // your github client secret
    'redirect' => 'http://your-callback-url',
],

注:如果 redirect 配置项包含的是相对路径,系统会自动将其转化为完整 url。


路由

接下来,准备开始认证用户!我们需要两个路由:一个用于重定向用户到 oauth 提供者,另一个用于认证后获取来自提供者的回调。我们使用 socialite facade 访问 socialite :

redirect();
    }
    /**
     * obtain the user information from 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();

注:使用 with 方法的时候,注意不要传递保留关键字作为数组的 key,例如 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 方法可用于禁止会话状态验证。这在添加 socialite 认证到某个 api 时很有用:

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

注:无状态认证对 twitter 驱动无效,因为它使用的是 oauth 1.0 认证。


获取用户信息

有了用户实例之后,就可以获取更多用户详情:

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

从 token(oauth2)中获取用户信息

如果我们已经有了某个用户的有效访问token,就可以使用 userfromtoken 方法获取其信息:

$user = socialite::driver('github')->userfromtoken($token);

从 token(oauth1)和 secret 中获取用户信息

如果已经有了某个用户的有效 token/secret,就可以使用 userfromtokenandsecret 方法获取其信息:

$user = socialite::driver('twitter')->userfromtokenandsecret($token, $secret);

查看笔记

扫码一下
查看教程更方便
网站地图