1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-03 23:46:49 +08:00
# Conflicts:
#	app/Http/Admin/Views/templates/main.volt
#	app/Http/Home/Controllers/ConnectController.php
#	app/Http/Home/Services/Connect.php
#	app/Services/OAuth/QQ.php
#	app/Services/OAuth/WeiBo.php
#	app/Services/OAuth/WeiXin.php
This commit is contained in:
xiaochong0302 2020-12-08 17:17:13 +08:00
commit 83580d330d
8 changed files with 63 additions and 50 deletions

View File

@ -115,12 +115,11 @@ class ConnectController extends Controller
$service = new ConnectService();
$openUser = $service->getOpenUserInfo($code, $state, $provider);
$connect = $service->getConnectRelation($openUser['id'], $provider);
$connect = $service->getConnectRelation($openUser['id'], $openUser['provider']);
if ($connect && $connect->deleted == 0) {
if ($this->authUser->id > 0) {
$service->bindUser($openUser, $provider);
$service->bindUser($openUser);
return $this->response->redirect(['for' => 'home.uc.account']);
} else {
$service->authLogin($connect);

View File

@ -30,7 +30,7 @@ class Connect extends Service
$openUser = json_decode($post['open_user'], true);
$this->handleConnectRelation($user, $openUser, $post['provider']);
$this->handleConnectRelation($user, $openUser);
$auth = $this->getAppAuth();
@ -55,18 +55,18 @@ class Connect extends Service
$user = $userRepo->findById($account->id);
$this->handleConnectRelation($user, $openUser, $post['provider']);
$this->handleConnectRelation($user, $openUser);
$auth = $this->getAppAuth();
$auth->saveAuthInfo($user);
}
public function bindUser($openUser, $provider)
public function bindUser(array $openUser)
{
$user = $this->getLoginUser();
$this->handleConnectRelation($user, $openUser, $provider);
$this->handleConnectRelation($user, $openUser);
}
public function authLogin(ConnectModel $connect)
@ -173,24 +173,27 @@ class Connect extends Service
return $auth;
}
protected function handleConnectRelation(UserModel $user, array $openUser, $provider)
protected function handleConnectRelation(UserModel $user, array $openUser)
{
$connectRepo = new ConnectRepo();
$connect = $connectRepo->findByOpenId($openUser['id'], $provider);
$connect = $connectRepo->findByOpenId($openUser['id'], $openUser['provider']);
if ($connect) {
if (time() - $connect->update_time > 86400) {
$connect->open_name = $openUser['name'];
$connect->open_avatar = $openUser['avatar'];
$connect->open_name = $openUser['name'];
$connect->open_avatar = $openUser['avatar'];
if ($connect->user_id != $user->id) {
$connect->user_id = $user->id;
}
if ($connect->deleted == 1) {
$connect->deleted = 0;
$connect->update();
}
$connect->update();
} else {
$connect = new ConnectModel();
@ -199,7 +202,7 @@ class Connect extends Service
$connect->open_id = $openUser['id'];
$connect->open_name = $openUser['name'];
$connect->open_avatar = $openUser['avatar'];
$connect->provider = $provider;
$connect->provider = $openUser['provider'];
$connect->create();
}

View File

@ -51,7 +51,7 @@
<div class="security-item">
<span class="icon"><i class="layui-icon layui-icon-email"></i></span>
<span class="title">邮箱绑定</span>
{% if account.phone %}
{% if account.email %}
<span class="summary">已绑定邮箱:{{ account.email|anonymous }}</span>
<span class="action"><a class="layui-btn layui-btn-sm btn-edit-email" href="{{ edit_email_url }}">修改</a></span>
{% else %}

View File

@ -7,6 +7,8 @@
{% set full_user_url = full_url({'for':'home.user.show','id':user.id}) %}
{% set qrcode_url = url({'for':'home.qrcode'},{'text':full_user_url}) %}
{% set user.area = user.area ? user.area : '火星' %}
{% set user.about = user.about ? user.about : '这个家伙很懒,什么都没留下!' %}
<div class="breadcrumb">
<span class="layui-breadcrumb">
@ -32,9 +34,7 @@
<p><span><i class="layui-icon layui-icon-location"></i></span><span>{{ user.area }}</span></p>
<p><span><i class="layui-icon layui-icon-time"></i></span><span>{{ date('Y-m-d H:i',user.active_time) }}</span></p>
</div>
{% if user.about %}
<div class="about">{{ user.about }}</div>
{% endif %}
<div class="about">{{ user.about }}</div>
</div>
{% set show_tab_courses = user.course_count > 0 %}

View File

@ -2,6 +2,7 @@
namespace App\Services\Logic\Account;
use App\Library\Utils\Password as PasswordUtil;
use App\Library\Validators\Common as CommonValidator;
use App\Models\Account as AccountModel;
use App\Models\ImUser as ImUserModel;
@ -42,6 +43,10 @@ class Register extends Service
$data['password'] = $accountValidator->checkPassword($post['password']);
$data['salt'] = PasswordUtil::salt();
$data['password'] = PasswordUtil::hash($data['password'], $data['salt']);
try {
$this->db->begin();

View File

@ -2,6 +2,7 @@
namespace App\Services\OAuth;
use App\Models\Connect as ConnectModel;
use App\Services\OAuth;
class QQ extends OAuth
@ -18,10 +19,10 @@ class QQ extends OAuth
'client_id' => $this->clientId,
'redirect_uri' => $this->redirectUri,
'state' => $this->getState(),
'scope' => 'get_user_info',
'response_type' => 'code',
'scope' => 'get_user_info',
];
return self::AUTHORIZE_URL . '?' . http_build_query($params);
}
@ -34,22 +35,22 @@ class QQ extends OAuth
'redirect_uri' => $this->redirectUri,
'grant_type' => 'authorization_code',
];
$response = $this->httpPost(self::ACCESS_TOKEN_URL, $params);
$this->accessToken = $this->parseAccessToken($response);
return $this->accessToken;
}
public function getOpenId($accessToken)
{
$params = ['access_token' => $accessToken];
$response = $this->httpGet(self::OPENID_URL, $params);
$this->openId = $this->parseOpenId($response);
return $this->openId;
}
@ -60,7 +61,7 @@ class QQ extends OAuth
'access_token' => $accessToken,
'openid' => $openId,
];
$response = $this->httpGet(self::USER_INFO_URL, $params);
return $this->parseUserInfo($response);
@ -69,29 +70,29 @@ class QQ extends OAuth
protected function parseAccessToken($response)
{
$result = [];
parse_str($response, $result);
if (!isset($result['access_token'])) {
throw new \Exception("Fetch Access Token Failed:{$response}");
}
return $result['access_token'];
}
protected function parseOpenId($response)
{
$result = $matches = [];
if (!empty($response)) {
preg_match('/callback\(\s+(.*?)\s+\)/i', $response, $matches);
$result = json_decode($matches[1], true);
}
if (!isset($result['openid'])) {
throw new \Exception("Fetch OpenId Failed:{$response}");
}
return $result['openid'];
}
@ -106,6 +107,7 @@ class QQ extends OAuth
$userInfo['id'] = $this->openId;
$userInfo['name'] = $data['nickname'];
$userInfo['avatar'] = $data['figureurl'];
$userInfo['provider'] = ConnectModel::PROVIDER_QQ;
return $userInfo;
}

View File

@ -2,6 +2,7 @@
namespace App\Services\OAuth;
use App\Models\Connect as ConnectModel;
use App\Services\OAuth;
class WeiBo extends OAuth
@ -19,7 +20,7 @@ class WeiBo extends OAuth
'state' => $this->getState(),
'response_type' => 'code',
];
return self::AUTHORIZE_URL . '?' . http_build_query($params);
}
@ -32,11 +33,11 @@ class WeiBo extends OAuth
'redirect_uri' => $this->redirectUri,
'grant_type' => 'authorization_code',
];
$response = $this->httpPost(self::ACCESS_TOKEN_URL, $params);
$this->accessToken = $this->parseAccessToken($response);
return $this->accessToken;
}
@ -51,9 +52,9 @@ class WeiBo extends OAuth
'access_token' => $accessToken,
'uid' => $openId,
];
$response = $this->httpGet(self::USER_INFO_URL, $params);
return $this->parseUserInfo($response);
}
@ -64,9 +65,9 @@ class WeiBo extends OAuth
if (!isset($data['access_token']) || !isset($data['uid'])) {
throw new \Exception("Fetch Access Token Failed:{$response}");
}
$this->openId = $data['uid'];
return $data['access_token'];
}
@ -81,6 +82,7 @@ class WeiBo extends OAuth
$userInfo['id'] = $data['id'];
$userInfo['name'] = $data['name'];
$userInfo['avatar'] = $data['profile_image_url'];
$userInfo['provider'] = ConnectModel::PROVIDER_WEIBO;
return $userInfo;
}

View File

@ -2,6 +2,7 @@
namespace App\Services\OAuth;
use App\Models\Connect as ConnectModel;
use App\Services\OAuth;
class WeiXin extends OAuth
@ -20,7 +21,7 @@ class WeiXin extends OAuth
'response_type' => 'code',
'scope' => 'snsapi_login',
];
return self::AUTHORIZE_URL . '?' . http_build_query($params);
}
@ -32,11 +33,11 @@ class WeiXin extends OAuth
'secret' => $this->clientSecret,
'grant_type' => 'authorization_code',
];
$response = $this->httpPost(self::ACCESS_TOKEN_URL, $params);
$this->accessToken = $this->parseAccessToken($response);
return $this->accessToken;
}
@ -51,22 +52,22 @@ class WeiXin extends OAuth
'access_token' => $accessToken,
'openid' => $openId,
];
$response = $this->httpGet(self::USER_INFO_URL, $params);
return $this->parseUserInfo($response);
}
private function parseAccessToken($response)
{
$data = json_decode($response, true);
if (isset($data['errcode']) && $data['errcode'] != 0) {
throw new \Exception("Fetch Access Token Failed:{$response}");
}
$this->openId = $data['openid'];
return $data['access_token'];
}
@ -81,6 +82,7 @@ class WeiXin extends OAuth
$userInfo['id'] = $data['openid'];
$userInfo['name'] = $data['nickname'];
$userInfo['avatar'] = $data['headimgurl'];
$userInfo['provider'] = ConnectModel::PROVIDER_WEIXIN;
return $userInfo;
}