196 lines
5.4 KiB
PHP
196 lines
5.4 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace addons\third;
|
||
|
|
||
|
use addons\third\library\Service;
|
||
|
use app\common\library\Auth;
|
||
|
use app\common\library\Menu;
|
||
|
use think\Addons;
|
||
|
use think\Db;
|
||
|
use think\Request;
|
||
|
use think\Session;
|
||
|
|
||
|
/**
|
||
|
* 第三方登录
|
||
|
*/
|
||
|
class Third extends Addons
|
||
|
{
|
||
|
|
||
|
protected static $html = ['register' => '', 'profile' => ''];
|
||
|
|
||
|
/**
|
||
|
* 插件安装方法
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function install()
|
||
|
{
|
||
|
$menu = [
|
||
|
[
|
||
|
'name' => 'third',
|
||
|
'title' => '第三方登录管理',
|
||
|
'icon' => 'fa fa-users',
|
||
|
'sublist' => [
|
||
|
[
|
||
|
"name" => "third/index",
|
||
|
"title" => "查看"
|
||
|
],
|
||
|
[
|
||
|
"name" => "third/del",
|
||
|
"title" => "删除"
|
||
|
]
|
||
|
]
|
||
|
]
|
||
|
];
|
||
|
Menu::create($menu);
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 插件卸载方法
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function uninstall()
|
||
|
{
|
||
|
Menu::delete("third");
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 插件启用方法
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function enable()
|
||
|
{
|
||
|
Menu::enable("third");
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 插件禁用方法
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function disable()
|
||
|
{
|
||
|
Menu::disable("third");
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 删除第三方登录表的关联数据
|
||
|
*/
|
||
|
public function userDeleteSuccessed(\app\common\model\User $user)
|
||
|
{
|
||
|
\addons\third\model\Third::where('user_id', $user->id)->delete();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 移除第三方登录信息
|
||
|
*/
|
||
|
public function userLogoutSuccessed(\app\common\model\User $user)
|
||
|
{
|
||
|
Session::delete(["wechat-userinfo", "qq-userinfo", "weibo-userinfo"]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 模块开始
|
||
|
*/
|
||
|
public function moduleInit()
|
||
|
{
|
||
|
$config = $this->getConfig();
|
||
|
if (!$config['status']) {
|
||
|
return;
|
||
|
}
|
||
|
$request = Request::instance();
|
||
|
|
||
|
$module = strtolower($request->module());
|
||
|
$controller = strtolower($request->controller());
|
||
|
$action = strtolower($request->action());
|
||
|
if ($module !== 'index' || $controller !== 'user' || !in_array($action, ['login', 'register'])) {
|
||
|
return;
|
||
|
}
|
||
|
$url = $request->get('url', $request->server('HTTP_REFERER', '', 'trim'), 'trim');
|
||
|
$data = [
|
||
|
'status' => explode(',', $config['status']),
|
||
|
'url' => $url
|
||
|
];
|
||
|
self::$html['register'] = $this->view->fetch('view/hook/user_register_end', $data);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 方法开始
|
||
|
*/
|
||
|
public function actionBegin()
|
||
|
{
|
||
|
$config = $this->getConfig();
|
||
|
if (!$config['status']) {
|
||
|
return;
|
||
|
}
|
||
|
$request = Request::instance();
|
||
|
|
||
|
$module = strtolower($request->module());
|
||
|
$controller = strtolower($request->controller());
|
||
|
$action = strtolower($request->action());
|
||
|
if ($module !== 'index' || $controller !== 'user' || !in_array($action, ['profile'])) {
|
||
|
return;
|
||
|
}
|
||
|
$platform = \addons\third\model\Third::where('user_id', Auth::instance()->id)->column('platform');
|
||
|
|
||
|
// 微信判断apptype
|
||
|
if (in_array('wechat', $platform)) {
|
||
|
$wechatApptypeArr = \addons\third\model\Third::where('user_id', Auth::instance()->id)->where('platform', 'wechat')->column('apptype');
|
||
|
$apptype = Service::getApptype();
|
||
|
if (!in_array($apptype, $wechatApptypeArr)) {
|
||
|
$platform = array_diff($platform, ['wechat']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$data = [
|
||
|
'status' => explode(',', $config['status']),
|
||
|
'platform' => $platform
|
||
|
];
|
||
|
self::$html['profile'] = $this->view->fetch('view/hook/user_profile_end', $data);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 配置
|
||
|
* @param $params
|
||
|
*/
|
||
|
public function configInit(&$params)
|
||
|
{
|
||
|
// 兼容旧版本FastAdmin
|
||
|
$config = $this->getConfig();
|
||
|
$module = strtolower(request()->module());
|
||
|
$controller = strtolower(request()->controller());
|
||
|
$action = strtolower(request()->action());
|
||
|
$loginhtml = version_compare(config('fastadmin.version'), '1.3.0', '<') > 0 && $module === 'index' && $controller === 'user' && in_array($action, ['login', 'register']) ? self::$html['register'] : '';
|
||
|
$params['third'] = ['status' => explode(',', $config['status']), 'loginhtml' => $loginhtml];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* HTML替换
|
||
|
*/
|
||
|
public function viewFilter(&$content)
|
||
|
{
|
||
|
$config = $this->getConfig();
|
||
|
if (!$config['status']) {
|
||
|
return;
|
||
|
}
|
||
|
$request = Request::instance();
|
||
|
|
||
|
$module = strtolower($request->module());
|
||
|
$controller = strtolower($request->controller());
|
||
|
$action = strtolower($request->action());
|
||
|
if ($module !== 'index' || $controller !== 'user') {
|
||
|
return;
|
||
|
}
|
||
|
if (in_array($action, ['login', 'register'])) {
|
||
|
$html = self::$html['register'] ?? '';
|
||
|
$content = preg_replace('/<!\-\-@(IndexRegisterFormEnd|IndexLoginFormEnd)\-\->/i', "\$0\n" . $html, $content);
|
||
|
} elseif ($action === 'profile') {
|
||
|
$html = self::$html['profile'] ?? '';
|
||
|
$content = str_replace("<div class=\"form-group normal-footer\">", "{$html}<div class=\"form-group normal-footer\">", $content);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|