微信网站扫码登录
注意: 本模块不依赖用户模块,数据表里的
user_id可以由开发者通过事件关联到用户表 注意: 依赖overtrue/wechat作服务层
因为微信扫码对浏览器没有判断能力(像钉钉扫码可以限制在UserAgent含有Dingtalk时显示), 建议在设置
middleware时顺序放最后面, 比如放在goodowng/laravel-dingtalk-oauth后面, 因为dingtalk可以根据UserAgent判断是否符合钉钉扫码条件, 不符合钉钉再显示微信二维码,不容易冲突或者拦截掉本该显示钉钉二维码的场景。
-
当用户满足以下条件时,解析微信信息:
未登录- 且
非微信客户端 - url中有
code参数时
-
middleware解析该请求,获得该登录者微信信息;
-
根据该微信信息,查找或创建
WechatWebUser身份; -
若是新用户,则触发
WebUserCreated($wechatWebUser)事件 -
触发
WebUserAuthorized($wechatWebUser)事件
**注意:**本模块不会自动创建
User用户,更不会自动登录。若有类似需求,需要监听以下事件并写相应逻辑的代码:
- 监听
WebUserCreated事件,创建User对象- 监听
WebUserAuthorized事件,进行登录用户的逻辑
-
安装依赖模块
composer require "goodwong/laravel-wechat-web" -
打开config/app.php,在providers数组里注册服务:
// Application Service Providers... Goodwong\WechatWeb\WechatWebServiceProvider::class,
-
创建数据库表
php artisan migrate
-
设置 appid / appsecret 在.env文件中,增加下面内容:
WECHAT_WEB_APPID= WECHAT_WEB_SECRET= WECHAT_WEB_AUTO_REDIRECT= WECHAT_WEB_USE_SESSION=
有两种方式设置中间件:
-
设置 middleware 在app/Http/Kernel.php里添加:
/** * The application's route middleware. * * These middleware may be assigned to groups or used individually. * * @var array */ protected $routeMiddleware = [ // ... 'wechat_web_oauth' => \Goodwong\WechatWeb\Middleware\OAuthAuthenticate::class, ];
-
直接在web.php的路由规则里添加:
// user auth Route::group([ 'middleware' => [ \Goodwong\WechatWeb\Middleware\OAuthAuthenticate::class, ], ], function () { // ... });
在.env文件中,配置以下信息:
-
微信平台
WECHAT_WEB_APPID= WECHAT_WEB_SECRET=
这些信息可以在开放平台里注册获取
-
当用户未登录时,是否跳转路由到微信扫码登录网站?默认不跳转(由开发者自己发起跳转,或者在前端页面中显示二维码)
WECHAT_WEB_AUTO_REDIRECT=true -
是否使用session缓存微信扫码结果?默认不缓存
WECHAT_WEB_USE_SESSION=0