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脚本数据库功能详解(下)
Oct 09 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
thinkphp实现多语言功能(语言包)
Mar 04 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
php实现获取及设置用户访问页面语言类
Sep 24 PHP
php遍历类中包含的所有元素的方法
May 12 PHP
分享PHP守护进程类
Dec 30 PHP
php简单统计在线人数的方法
May 10 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
php提交表单时保留多个空格及换行的文本样式的方法
Jun 20 PHP
php实现websocket实时消息推送
Mar 30 PHP
laravel 获取当前url的别名方法
Oct 11 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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
2015/05/09 PHP
Egret引擎开发指南之发布项目
2014/09/03 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
深入理解jQuery()方法的构建原理
2016/12/05 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
Mongoose中document与object的区别示例详解
2017/09/18 Javascript
angularjs实现过滤并替换关键字小功能
2017/09/19 Javascript
angular写一个列表的选择全选交互组件的示例
2018/01/22 Javascript
JS实现移动端点击按钮复制文本内容
2019/07/28 Javascript
vue项目中常见问题及解决方案(推荐)
2019/10/21 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
python、java等哪一门编程语言适合人工智能?
2017/11/13 Python
浅谈python中get pass用法
2019/03/19 Python
Python对wav文件的重采样实例
2020/02/25 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
django models里数据表插入数据id自增操作
2020/07/15 Python
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
自荐信格式范文
2013/10/07 职场文书
新学期校长寄语
2014/01/18 职场文书
经销商培训邀请函
2014/01/21 职场文书
岗位廉洁从政承诺书
2014/03/27 职场文书
企业精神口号
2014/06/11 职场文书
个人总结与自我评价
2015/02/14 职场文书
上诉状格式
2015/05/23 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery
小程序实现筛子抽奖
2021/05/26 Javascript