环境 后端框架laravel5.4
实现过程以微信网页版第三方登录,其他于此类似,在此不做重复。
准备工作
网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。
总结下来就是:
进入微信开放平台注册开发者账号
根据项目类型创建应用,再此我创建的是网站应用.
接入微信登陆功能,让用户可使用微信登录你的网站应用
获得AppID和AppSectet
到此微信第三方登录的准备工作就完成了。
各平台密钥申请 微信:https://mp.weixin.qq.com/ QQ:https://connect.qq.com/ 微博:https://open.weibo.com/connect
授权流程说明
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
添加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'),
],
添加事件监听
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@handleProviderCallb
```ack');
5. 编写WeixinController
```php
<?php/**
* Created by PhpStorm.
* User: oldcai
* Date: 02/22/2022
* 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不符),参见下面规范
白俊遥博客
exception 'Laravel\Socialite\Two\InvalidStateException' in /example/vendor/laravel/socialite/src/Two/AbstractProvider.php:161
解决:
通过stateless()方法禁止会话状态验证
Socialite::driver('weixinweb')->stateless()->user()
本文为码上有钱原创文章,转载无需和我联系,但请注明来自码上有钱博客https://oldcai688.com
最新评论