laravel5实现微信第三方登录功能
背景
最近手头一个项目需要实现用户在网站的第三方登录(微信和微博),后端框架laravel5.4。
实现过程以微信网页版第三方登录,其他于此类似,在此不做重复。
准备工作
网站应用微信登录是基于OAuth3.0协议标准构建的微信OAuth3.0授权登录系统。
在进行微信OAuth3.在进行微信OAuth3.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。
总结下来就是:
1.进入微信开放平台注册开发者账号
2.根据项目类型创建应用,再此我创建的是网站应用.
3.接入微信登陆功能,让用户可使用微信登录你的网站应用
4.获得AppID和AppSectet
到此微信第三方登录的准备工作就完成了。
授权流程说明
1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
在框架中实现(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$composersearchsocialiteproviders/weixinsocialiteproviders/weixinWeixinOAuth3ProviderforLaravelSocialitesocialiteproviders/weixin-webWeixin-WebOAuth3ProviderforLaravelSocialitesocialiteproviders/weixin-webWeixin-WebOAuth3ProviderforLaravelSocialitesocialiteproviders/weixinWeixinOAuth3ProviderforLaravelSocialite
相关配置
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
添加事件监听
useSocialiteProviders\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/***CreatedbyPhpStorm.*User:shanlei*Date:1/6/2017*Time:11:34AM*/namespaceApp\Http\Controllers\Auto\ThirdLogin;useSocialite;useIlluminate\Http\Request;useApp\Http\Controllers\Controller;useSocialiteProviders\WeixinWeb\Provider;classWeixinControllerextendsController{publicfunctionredirectToProvider(Request$request){returnSocialite::with('weixinweb')->redirect();}publicfunctionhandleProviderCallback(Request$request){$user_data=Socialite::with('weixinweb')->stateless()->user();dd($user_data);}}
访问auth/weixin,获得返回数据。
常见错误
1. 微信授权回调域不符(redirect_uri不符),参见下面规范:
2. 执行过程中出现一下错误:
exception 'Laravel\Socialite\Two\InvalidStateException'
in /example/vendor/laravel/socialite/src/Two/AbstractProvider.php:161
解决:
通过stateless()方法禁止会话状态验证
Socialite::driver('weixinweb')->stateless()->user()
PHP后台实现微信小程序登录
详解Vue微信授权登录前后端分离较为优雅的解决方案
vue 微信授权登录解决方案
一步步教会你微信小程序的登录鉴权
微信小程序获取手机号授权用户登录功能
java实现微信小程序登录态维护的示例代码
详解微信小程序 登录获取unionid
关于在vue-cli中使用微信自动登录和分享的实例
微信小程序 新建登录页并实现tabBar隐藏
微信小程序中做用户登录与登录态维护的实现详解
第三方网站微信登录java代码实现
微信小程序实战之登录页面制作(5)
文章同步发布:https://www.geek-share.com/detail/2755097818.html
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。