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一些服务器端特性的配置加强php的安全
Oct 09 PHP
php入门教程 精简版
Dec 13 PHP
PHP5中虚函数的实现方法分享
Apr 20 PHP
如何在PHP中使用正则表达式进行查找替换
Jun 13 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 PHP
php源码 fsockopen获取网页内容实例详解
Sep 24 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
php+mysql+jquery实现日历签到功能
Feb 27 PHP
php利用fsockopen GET/POST提交表单及上传文件
May 22 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
PHP实现微信小程序人脸识别刷脸登录功能
May 24 PHP
PHP实现字符串的全排列详解
Apr 24 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函数的实现原理及性能分析(一)
2015/05/13 PHP
Zend Framework实现留言本分页功能(附demo源码下载)
2016/03/22 PHP
javascript引用对象的方法
2007/01/11 Javascript
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
javascript 进度条 实现代码
2009/07/30 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
浅谈layui分页控件field参数接收对象的问题
2019/09/20 Javascript
javascript实现移动端触屏拖拽功能
2020/07/29 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
Python3实现并发检验代理池地址的方法
2016/09/18 Python
使用python 爬虫抓站的一些技巧总结
2018/01/10 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
2019/09/29 Python
python实现从wind导入数据
2019/12/03 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
教师专业理论水平的自我评价分享
2013/11/09 职场文书
银行门卫岗位职责
2013/12/29 职场文书
军训 自我鉴定
2014/02/03 职场文书
班级安全教育实施方案
2014/02/23 职场文书
职位说明书范文
2014/05/07 职场文书
运动会标语
2014/06/21 职场文书
三方股东合作协议书
2014/10/28 职场文书
机关保密工作承诺书
2015/05/04 职场文书
springcloud整合seata
2022/05/20 Java/Android