laravel5实现微信第三方登陆功能

背景php

最近手头一个项目须要实现用户在网站的第三方登陆(微信和微博),后端框架laravel5.4。html

实现过程以微信网页版第三方登陆,其余于此相似,在此不作重复。vue

准备工做java

网站应用微信登陆是基于OAuth2.0协议标准构建的微信OAuth2.0受权登陆系统。
在进行微信OAuth2.在进行微信OAuth2.0受权登陆接入以前,在微信开放平台注册开发者账号,并拥有一个已审核经过的网站应用,并得到相应的AppID和AppSecret,申请微信登陆且经过审核后,可开始接入流程。laravel

总结下来就是:git

1.进入微信开放平台注册开发者帐号
2.根据项目类型建立应用,再此我建立的是网站应用.
3.接入微信登录功能,让用户可以使用微信登陆你的网站应用
4.得到AppID和AppSectetgithub

到此微信第三方登陆的准备工做就完成了。web

受权流程说明vue-cli

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$ 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,得到返回数据。

常见错误

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()

 

您可能感兴趣的文章:

文章同步发布: https://www.geek-share.com/detail/2755097818.html

相关文章
相关标签/搜索