文档章节

Laravel 第三方登陆之 Socialite Providers

dingdayu
 dingdayu
发布于 01/15 14:52
字数 1142
阅读 66
收藏 0

Laravel 框架在 PHP 以优雅著称,得到不少同行之人称赞;也招揽了,无数的第三方扩展包,扩展了框架的各个方面功能,本篇文章,采用 Socialite Providers,以开源中国OpenApi 实现的OAuth2 为例实现第三方登陆,体验 Laravel 之优雅。

Socialite

SocialiteLaravel 官方提供的实现 Oauth Client 的扩展包,用于实现各厂商提供的第三方登陆,并在其官方文档中有详尽的使用步骤描述,可点击以下链接查看:

Socialite 的使用十分方便,但其只提供了: Facebook、 Twitter、 LinkedIn、 Google、GitHub 和 Bitbucket 授权。并在在其 Github 上,标明 We are not accepting new adapters. (我们不接受新的适配器),但是官方推荐采用由社区运营的 Socialite Providers 来实现其他厂商的社会化登陆。

Socialite Providers

Socialite Providers 是基于 Socialite 的一个第三方登陆扩展包,由社区运作;其通过 LaravelEvent 机制来注册适配器,现已实现 123 (撰文时数据)个不同厂商的第三方登陆,同时支持 OAuth 1 & OAuth 2

其中包括国内常见的: Weixinweiboqqdouban 的适配器,我也已于前几日提交了oschina 的适配器,并已于今日通过审核合入主干:Added OSChina oAuth2 Provider

主页:https://socialiteproviders.netlify.com

Github:https://github.com/SocialiteProviders

OSChina: https://github.com/SocialiteProviders/OSChina

具体步骤

新建 Laravel 项目

composer create-project --prefer-dist laravel/laravel blog

本篇文章适合已经对 Laravel 框架有所了解的读者,具体安装,请见安装

引入扩展包

composer require socialiteproviders/oschina

注册服务

当扩展包引入完成后,在项目配置文件中添加 \SocialiteProviders\Manager\ServiceProvider::class 服务,如果你曾增加 Laravel\Socialite\SocialiteServiceProvide 服务(Socialite 扩展注册的),请移除:

  • 移除 config\app.php 文件中, providers[] 数组里的 Laravel\Socialite\SocialiteServiceProvider (如果有的话)。
  • 添加 \SocialiteProviders\Manager\ServiceProvider::classconfig\app.php 文件中的 providers[] 数组里。
	'providers' => [
		// a whole bunch of providers
		// remove 'Laravel\Socialite\SocialiteServiceProvider',
		\SocialiteProviders\Manager\ServiceProvider::class, // add
	];

添加事件监听

在项目 app/Providers/EventServiceProvider.php 文件的 protected $listen 数组属性中,添加 \SocialiteProviders\Manager\SocialiteWasCalled::class 事件,并为其添加对应适配器的监听器 \SocialiteProviders\OSChina\OSChinaExtendSocialite::class (oschina 对应的是这个,可也可以添加多个对应的适配器提供的监听器)。

    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        // 第三方登陆
        \SocialiteProviders\Manager\SocialiteWasCalled::class => [
            \SocialiteProviders\OSChina\OSChinaExtendSocialite::class
        ],
    ];

注册监听器时,请确保已经安装对应的适配器包,否则可能找不到对应的事件监听器。

添加配置

请确保您已在 应用管理 页面创建应用,并取得对应的相关:应用ID应用私钥回调地址,配置中需要用到。

请在配置文件 config/services.php 中添加对应的信息:

	'oschina' => [
		'client_id' => env('OSCHINA_KEY'),
		'client_secret' => env('OSCHINA_SECRET'),
		'redirect' => env('OSCHINA_REDIRECT_URI')
	],

为了调试和安全,这里我将具体的配置信息,放在 .env 文件中了,您可根据实际情况修改。

同时请注意 Laravel 的配置缓存 php artisan config:cache; 如果您通过 php artisan server,还需要重启命令。

新建控制器

app\Http\Controllers\Auth 新建控制器 OSChinaController.php 文件:

<?php
/**
 * Created by PhpStorm.
 * User: dingdayu
 * Date: 2019/1/11
 * Time: 01:07
 */

namespace App\Http\Controllers\Auth;


use App\Http\Controllers\Controller;
use Laravel\Socialite\Facades\Socialite;

/**
 * 开源中国授权
 *
 * Class OSChinaController
 * @package App\Http\Controllers\Auth
 */
class OSChinaController extends Controller
{

    /**
     * 跳转至第三方登陆
     *
     * @return mixed
     */
    public function redirect()
    {
        // return \Socialite::with('oschina')->scopes(array('email'))->redirect();
        return Socialite::with('oschina')->redirect();
    }

    /**
     * 第三方登陆回跳
     */
    public function callback()
    {
        $oauthUser = Socialite::with('oschina')->user();

        var_dump($oauthUser->getId());
        var_dump($oauthUser->getNickname());
        var_dump($oauthUser->getName());
        var_dump($oauthUser->getEmail());
        var_dump($oauthUser->getAvatar());
    }
}

添加跳转路由

Route::prefix('auth')->namespace('Auth')->group(function () {
    // 开源中国
    Route::get('oschina', 'OSChinaController@redirect');
    Route::get('oschina/callback', 'OSChinaController@callback');

    // QQ
    //Route::get('qq', 'QQController@redirect');
    //Route::get('qq/callback', 'QQController@callback');
});

QQ 是QQ登录的路由

验证

访问:

http://host/oauth/oschina

请替换 host

如果前面配置没有问题,并且项目安装没有问题,此时应该会跳转至 oschina 的授权询问页面,会显示需要授权的列表,点击 连接 回跳转回刚才的网站,http://host/oschina/callback, 会在 OSChinaControllercallback 方法,将用户的信息打印出来。

相关文章推荐

  1. Laravel5.1 实现第三方登录认证(包括微博、QQ、微信、豆瓣)

© 著作权归作者所有

dingdayu

dingdayu

粉丝 34
博文 119
码字总数 59598
作品 3
海淀
后端工程师
私信 提问
laravel5实现微信第三方登录功能

背景 最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4。 实现过程以微信网页版第三方登录,其他于此类似,在此不做重复。 准备工作 网站应用微信登录是基于...

开元中国2015
2018/12/07
122
0
如何有效的学习Laravel框架底层或者第三方库

1.刚开始看Laravel框架底层是一脸懵逼的,看着看着就不知道看到哪儿去了。没有一个宏观的概念和角度去理解。 2.试着结合《Laravel框架关键技术解析》来学习,能看懂一些了,比如核心ioc容器。...

OSC_NVnHth
2018/10/18
1K
6
laravel开发资源

集大成者 http://labs.infyom.com/laravelgenerator/ We have worked on many projects that required to create APIs and scaffold CRUD type of thing. And the problem that we faced was......

ifeixiang
2016/02/21
303
0
Socialite提示cURL error 60错误的解决方案

在使用Socialite实现QQ登录时系统给出了如下提示: cURL error 60错误提示 看问题描述说是由于我的证书是自签名证书的缘故,可我的证书是在腾讯申请的经过CA认证的证书,怎么会是自签名证书呢...

Elvis_Li
2018/01/12
0
0
TODO:Laravel增加验证码

TODO:Laravel增加验证码 1. 先聊聊验证码是什么,有什么作用? 验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和...

OneTODO
2016/12/22
80
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
650
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
35
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
22
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
67
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
63
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部