1. 程式人生 > >laravel5實現微信第三方登入功能

laravel5實現微信第三方登入功能

背景

最近手頭一個專案需要實現使用者在網站的第三方登入(微信和微博),後端框架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進行介面呼叫,獲取使用者基本資料資源或幫助使用者實現基本操作。

在框架中實現(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。

[email protected]:/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\[email protected]',
],
];

4. 新增路由

Route::get('auth/weixin', 'Auto\ThirdLogin\[email protected]');
Route::get('auth/weixin/callback','Auto\ThirdLogin\[email protected]');

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