laravel集成微信第三方登录

2019-10-28

本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。

声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:任志帆的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!

1、Laravel Socialite简介

除了传统的基于表单的登录认证外,Laravel 还可以通过 Laravel Socialite 提供 OAuth 认证,目前支持的认证驱动包括 Facebook、Twitter、Google、LinkedIn、GitHub 和 Bitbucket。 官方文档

2、安装扩展包

2-1安装相关依赖

composer require laravel/socialite

2-2安装weixin-web

composer require socialiteproviders/weixin-web

注意网站实现微信登录需要的依赖包为socialiteproviders/weixin-web,如果是手机端App那么可以用socialiteproviders/weixin。

3、相关配置

3-1 设置app/config.php

添加providers:

...
'providers' => [
    \SocialiteProviders\Manager\ServiceProvider::class,
],

添加aliases:

'aliases' => [ 
    'Socialite' => Laravel\Socialite\Facades\Socialite::class, 
],

3-2 配置config/services.php

  ...
    'weixinweb' => [
    'client_id' => env('WEIXINWEB_KEY'),
    'client_secret' => env('WEIXINWEB_SECRET'),
    'redirect' => env('WEIXINWEB_REDIRECT_URI')
],

3-3 设置app/Providers/EventServiceProvider.php

添加事件监听

protected $listen = [
    Registered::class => [
        SendEmailVerificationNotification::class,

    ],
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        'SocialiteProviders\\WeixinWeb\\WeixinWebExtendSocialite@handle',
    ],
];

3-4 添加路由

这里由于我用的是dinggo Api 所有单独加了web中间件

$api->get('auth/weixin', 'AuthorizationsController@redirectToProvider')->middleware('web');
$api->get('auth/weixin/callback','AuthorizationsController@handleProviderCallback')->middleware('web');

3-5 编写WeixinController

<?php
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);
    }
}

访问/api/auth/weixin,获得返回数据。

常见错误

1、微信授权回调域不符(redirect_uri不符),参见下面规范:

wechat

2、执行过程中出现一下错误:

exception 'Laravel\Socialite\Two\InvalidStateException' 
in /example/vendor/laravel/socialite/src/Two/AbstractProvider.php:161

解决: 通过stateless()方法禁止会话状态验证 Socialite::driver(‘weixinweb’)->stateless()->user()

3、env配置如下

#weixinweb
WEIXINWEB_KEY=********
WEIXINWEB_SECRET=*******************
WEIXINWEB_REDIRECT_URI=https://服务端域名/api/auth/weixin/callback



章节列表