mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-07-03 23:46:49 +08:00
Merge branch 'develop' of https://gitee.com/koogua/course-tencent-cloud into demo
# 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:
commit
83580d330d
@ -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);
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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 %}
|
||||
|
@ -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 %}
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user