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关于array_multisort多维数组排序的使用说明
Jan 04 PHP
ThinkPHP中处理表单中的注意事项
Nov 22 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
PHP、Python和Javascript的装饰器模式对比
Feb 03 PHP
php读取csv文件并输出的方法
Mar 14 PHP
Laravel 5框架学习之路由、控制器和视图简介
Apr 07 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
yii2 resetful 授权验证详解
May 18 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 PHP
PHP开发API接口签名生成及验证操作示例
May 27 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
php数据序列化测试实例详解
2017/08/12 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
Yii框架Session与Cookie使用方法示例
2019/10/14 PHP
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
jQuery实现鼠标经过图片预览大图效果
2014/04/10 Javascript
JavaScript插件化开发教程(五)
2015/02/01 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
利用js编写网页进度条效果
2017/10/08 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
layerUI下的绑定事件实例代码
2018/08/17 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
python 字段拆分详解
2019/12/17 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
Myholidays美国:在线旅游网站
2019/08/16 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
酒店优秀员工事迹材料
2014/06/02 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
linux下安装redis图文详细步骤
2021/12/04 Redis
instantclient客户端 连接oracle数据库
2022/04/26 Oracle