laravel5实现微信第三方登录功能


Posted in PHP onDecember 06, 2018

背景

最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4。

实现过程以微信网页版第三方登录,其他于此类似,在此不做重复。

准备工作

网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。
在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

总结下来就是:

1.进入微信开放平台注册开发者账号
2.根据项目类型创建应用,再此我创建的是网站应用.
3.接入微信登陆功能,让用户可使用微信登录你的网站应用
4.获得AppID和AppSectet

到此微信第三方登录的准备工作就完成了。

授权流程说明

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

laravel5实现微信第三方登录功能

在框架中实现(laravel)

Laravel Socialite简介

除了传统的基于表单的登录认证外,Laravel 还可以通过Laravel Socialite 提供 OAuth 认证,目前支持的认证驱动包括 Facebook、Twitter、Google、LinkedIn、GitHub 和 Bitbucket。

安装相关依赖

composer require laravel/socialite

安装weixin-web

composer require socialiteproviders/weixin-web

注意网站实现微信登录需要的依赖包为socialiteproviders/weixin-web,如果是手机端App那么可以用socialiteproviders/weixin。

shanlei@shanlei-Lenovo-ideapad-110-15ISK:/var/www/html/zslm_back$ composer search socialiteproviders/weixin
socialiteproviders/weixin Weixin OAuth2 Provider for Laravel Socialite
socialiteproviders/weixin-web Weixin-Web OAuth2 Provider for Laravel Socialite
socialiteproviders/weixin-web Weixin-Web OAuth2 Provider for Laravel Socialite
socialiteproviders/weixin Weixin OAuth2 Provider for Laravel Socialite

相关配置

1. 设置app/config.php

添加providers:

'providers' => [
SocialiteProviders\Manager\ServiceProvider::class,
],

添加aliases:

'aliases' => [ 
 'Socialite' => Laravel\Socialite\Facades\Socialite::class, 
],

2. 配置config/services.php

'weixinweb' => [
 'client_id' => env('WEIXIN_KEY'),
 'client_secret' => env('WEIXIN_SECRET'),
 'redirect' => env('WEIXIN_REDIRECT_URI'),
 ],

3. 设置app/Providers/EventServiceProvider.php

添加事件监听

use SocialiteProviders\Manager\SocialiteWasCalled;
 protected $listen = [
 'SocialiteProviders\Manager\SocialiteWasCalled' => [
  'SocialiteProviders\WeixinWeb\WeixinWebExtendSocialite@handle',
 ],
 ];

4. 添加路由

Route::get('auth/weixin', 'Auto\ThirdLogin\WeixinController@redirectToProvider');
Route::get('auth/weixin/callback','Auto\ThirdLogin\WeixinController@handleProviderCallback');

5. 编写WeixinController

<?php
/**
 * Created by PhpStorm.
 * User: shanlei
 * Date: 1/6/2017
 * Time: 11:34 AM
 */

namespace App\Http\Controllers\Auto\ThirdLogin;

use Socialite;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use SocialiteProviders\WeixinWeb\Provider;

class WeixinController extends Controller{
 public function redirectToProvider(Request $request)
 { 
 return Socialite::with('weixinweb')->redirect();
 }
 public function handleProviderCallback(Request $request)
 {
 $user_data = Socialite::with('weixinweb')->stateless()->user();
 dd($user_data);
 }
}

访问auth/weixin,获得返回数据。

laravel5实现微信第三方登录功能

常见错误

1. 微信授权回调域不符(redirect_uri不符),参见下面规范:​

laravel5实现微信第三方登录功能

2. 执行过程中出现一下错误:

exception 'Laravel\Socialite\Two\InvalidStateException'
in /example/vendor/laravel/socialite/src/Two/AbstractProvider.php:161

解决:

通过stateless()方法禁止会话状态验证

Socialite::driver('weixinweb')->stateless()->user()

总结

以上所述是小编给大家介绍的laravel5实现微信第三方登录功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
PHP中将网页导出为Word文档的代码
May 25 PHP
微信扫描二维码登录网站代码示例
Dec 30 PHP
php读取mysql的简单实例
Jan 15 PHP
php实现加减法验证码代码
Feb 14 PHP
zf框架db类的分页示例分享
Mar 14 PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 PHP
C#静态方法与非静态方法实例分析
Sep 22 PHP
PHP中串行化用法示例
Nov 16 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
Nov 06 PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 PHP
PHP实现简单计算器小程序
Aug 28 #PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 #PHP
php实现算术验证码功能
Dec 05 #PHP
php使用array_chunk函数将一个数组分割成多个数组
Dec 05 #PHP
Yii支持多域名cors原理的实现
Dec 05 #PHP
php判断电子邮件是否正确方法
Dec 04 #PHP
浅谈Laravel核心解读之Console内核
Dec 02 #PHP
You might like
在同一窗体中使用PHP来处理多个提交任务
2006/10/09 PHP
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
利用javascript/jquery对上传文件格式过滤的方法
2009/07/25 Javascript
JS 判断undefined的实现代码
2009/11/26 Javascript
jquery下将选择的checkbox的id组成字符串的方法
2010/11/28 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
js冒泡法和数组转换成字符串示例代码
2013/08/14 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
D3.js实现简洁实用的动态仪表盘的示例
2018/04/04 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python入门必须知道的11个知识点
2018/03/21 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
python将unicode和str互相转化的实现
2020/05/11 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
酒店管理专业毕业生推荐信
2013/11/10 职场文书
学校十一活动方案
2014/02/01 职场文书
大学生个人自荐信样本
2014/03/02 职场文书
2014年教师节国旗下讲话稿
2014/09/10 职场文书