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+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
Feb 15 PHP
一个简单的php实现的MySQL数据浏览器
Mar 11 PHP
php以post形式发送xml的方法
Nov 04 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
Nov 11 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
php自动加载方式集合
Apr 04 PHP
php mysqli查询语句返回值类型实例分析
Jun 29 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
PHP实现简单注册登录系统
Dec 28 PHP
php实例化对象的实例方法
Nov 17 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用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
php中{}大括号是什么意思
2013/12/01 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
基于node+vue实现简单的WebSocket聊天功能
2020/02/01 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
树莓派采用socket方式文件传输(python)
2019/06/22 Python
python挖矿算力测试程序详解
2019/07/03 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
使用AJAX和Django获取数据的方法实例
2020/10/25 Python
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
大专毕业生自我评价分享
2013/11/10 职场文书
高三体育教学反思
2014/01/29 职场文书
父亲的菜园教学反思
2014/02/13 职场文书
运动会通讯稿500字
2014/02/20 职场文书
本科生就业推荐信
2014/05/19 职场文书
党员检讨书范文
2014/12/27 职场文书
运动会表扬稿范文
2015/05/05 职场文书
2016年小学六一儿童节活动总结
2016/04/06 职场文书
django学习之ajax post传参的2种格式实例
2021/05/14 Python
详解如何用Python实现感知器算法
2021/06/18 Python