博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Laravel 第三方登陆之 Socialite Providers
阅读量:6965 次
发布时间:2019-06-27

本文共 3331 字,大约阅读时间需要 11 分钟。

hot3.png

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

Socialite

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

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

Socialite Providers

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

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

主页:

Github:

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 文件:

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 方法,将用户的信息打印出来。

相关文章推荐

转载于:https://my.oschina.net/dingdayu/blog/3001705

你可能感兴趣的文章
Centos7上安装 elasticsearch-6.2.2及相关插件
查看>>
window.opener方法的使用 js跨域
查看>>
Office CVE-2017-8570 远程代码执行漏洞复现
查看>>
智能工业监管控制系统 ——以遵化海祥机械项目为例
查看>>
linux/centos 解决Tomcat内存溢出,centostomcat
查看>>
docker搭建 LNMP 环境
查看>>
Java练习:用IF()进行数字排序
查看>>
Python实现拉格朗日插值法
查看>>
(1)虚拟机管理——在微软云Azure新门户创建虚拟机
查看>>
NFS
查看>>
求助不加域不能上网
查看>>
6-2pxe应用入门
查看>>
Day 49 Nginx
查看>>
大尺寸3D打印机:不再是“围城”!工业级3D打印的瞬发时代已来!
查看>>
RHEL和Centos系统的区别?
查看>>
如何制定企业5s管理制度手册?
查看>>
使用Jekyll搭建博客
查看>>
maven添加本地jar包依赖
查看>>
jade分页备忘
查看>>
Java - PriorityQueue
查看>>