背景
最近手頭一個(gè)項(xiàng)目需要實(shí)現(xiàn)用戶在網(wǎng)站的第三方登錄(微信和微博),后端框架laravel5.4。
實(shí)現(xiàn)過程以微信網(wǎng)頁版第三方登錄,其他于此類似,在此不做重復(fù)。
準(zhǔn)備工作
網(wǎng)站應(yīng)用微信登錄是基于OAuth2.0協(xié)議標(biāo)準(zhǔn)構(gòu)建的微信OAuth2.0授權(quán)登錄系統(tǒng)。
在進(jìn)行微信OAuth2.在進(jìn)行微信OAuth2.0授權(quán)登錄接入之前,在微信開放平臺(tái)注冊(cè)開發(fā)者帳號(hào),并擁有一個(gè)已審核通過的網(wǎng)站應(yīng)用,并獲得相應(yīng)的AppID和AppSecret,申請(qǐng)微信登錄且通過審核后,可開始接入流程。
總結(jié)下來就是:
1.進(jìn)入微信開放平臺(tái)注冊(cè)開發(fā)者賬號(hào)
2.根據(jù)項(xiàng)目類型創(chuàng)建應(yīng)用,再此我創(chuàng)建的是網(wǎng)站應(yīng)用.
3.接入微信登陸功能,讓用戶可使用微信登錄你的網(wǎng)站應(yīng)用
4.獲得AppID和AppSectet
到此微信第三方登錄的準(zhǔn)備工作就完成了。
授權(quán)流程說明
1. 第三方發(fā)起微信授權(quán)登錄請(qǐng)求,微信用戶允許授權(quán)第三方應(yīng)用后,微信會(huì)拉起應(yīng)用或重定向到第三方網(wǎng)站,并且?guī)鲜跈?quán)臨時(shí)票據(jù)code參數(shù);
2. 通過code參數(shù)加上AppID和AppSecret等,通過API換取access_token;
3. 通過access_token進(jìn)行接口調(diào)用,獲取用戶基本數(shù)據(jù)資源或幫助用戶實(shí)現(xiàn)基本操作。
在框架中實(shí)現(xiàn)(laravel)
Laravel Socialite簡介
除了傳統(tǒng)的基于表單的登錄認(rèn)證外,Laravel 還可以通過Laravel Socialite 提供 OAuth 認(rèn)證,目前支持的認(rèn)證驅(qū)動(dòng)包括 Facebook、Twitter、Google、LinkedIn、GitHub 和 Bitbucket。
安裝相關(guān)依賴
composer require laravel/socialite
安裝weixin-web
composer require socialiteproviders/weixin-web
注意網(wǎng)站實(shí)現(xiàn)微信登錄需要的依賴包為socialiteproviders/weixin-web,如果是手機(jī)端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
相關(guān)配置
1. 設(shè)置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. 設(shè)置app/Providers/EventServiceProvider.php
添加事件監(jiān)聽
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,獲得返回?cái)?shù)據(jù)。
常見錯(cuò)誤
1. 微信授權(quán)回調(diào)域不符(redirect_uri不符),參見下面規(guī)范:
2. 執(zhí)行過程中出現(xiàn)一下錯(cuò)誤:
exception 'Laravel\Socialite\Two\InvalidStateException'
in /example/vendor/laravel/socialite/src/Two/AbstractProvider.php:161
解決:
通過stateless()方法禁止會(huì)話狀態(tài)驗(yàn)證
Socialite::driver('weixinweb')->stateless()->user()
總結(jié)
以上所述是小編給大家介紹的laravel5實(shí)現(xiàn)微信第三方登錄功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
您可能感興趣的文章:- Laravel 5.4重新登錄實(shí)現(xiàn)跳轉(zhuǎn)到登錄前頁面的原理和方法
- Laravel5.2使用Captcha生成驗(yàn)證碼實(shí)現(xiàn)登錄(session巨坑)
- laravel5.2實(shí)現(xiàn)區(qū)分前后臺(tái)用戶登錄的方法
- 基于Laravel5.4實(shí)現(xiàn)多字段登錄功能方法示例
- Laravel5.5 實(shí)現(xiàn)后臺(tái)管理登錄的方法(自定義用戶表登錄)
- 解決laravel5中auth用戶登錄其他頁面獲取不到登錄信息的問題
- laravel 5.3 單用戶登錄簡單實(shí)現(xiàn)方法
- Laravel5.4框架使用socialite實(shí)現(xiàn)github登錄的方法
- Laravel 5.5 實(shí)現(xiàn)禁用用戶注冊(cè)示例
- Laravel5.1 框架登錄和注冊(cè)實(shí)現(xiàn)方法詳解