Skip to content

Commit

Permalink
更新:优化缓存,删除不必要代码
Browse files Browse the repository at this point in the history
  • Loading branch information
zhuchunshu committed Dec 24, 2022
1 parent ab6f522 commit 3bdb091
Show file tree
Hide file tree
Showing 8 changed files with 77 additions and 152 deletions.
58 changes: 2 additions & 56 deletions app/Plugins/Core/helpers.php
Expand Up @@ -39,63 +39,9 @@ function super_avatar($user_data): string
}

if (! function_exists('avatar')) {
function avatar(int | string $user_id, $class = null): string
function avatar($user_data): string
{
$time = get_options('core_user_def_avatar_cache', 600);
if (get_options('core_user_avatar_cache', '1') === '1') {
if (cache()->has('core.avatar.' . $user_id)) {
$ud = cache()->get('core.avatar.' . $user_id);
} else {
$ud = \App\Plugins\User\src\Models\User::query()->where('id', $user_id)->first();
cache()->set('core.avatar.' . $user_id, $ud, $time);
}
} else {
$ud = \App\Plugins\User\src\Models\User::query()->where('id', $user_id)->first();
}

if ($ud->avatar) {
return <<<HTML
<span class="avatar {$class}" style="background-image: url({$ud->avatar})">
</span>
HTML;
}

if (get_options('core_user_def_avatar', 'gavatar') !== 'ui-avatars') {
$url = get_options('theme_common_gavatar', 'https://cn.gravatar.com/avatar/') . md5($ud->email);
} else {
$url = 'https://ui-avatars.com/api/?background=random&format=svg&name=' . $ud->username;
}
return <<<HTML
<span class="avatar {$class}" style="background-image: url({$url})"></span>
HTML;
}
}

if (! function_exists('avatar_url')) {
function avatar_url(int $user_id): string
{
$time = get_options('core_user_def_avatar_cache', 600);
if (get_options('core_user_avatar_cache', '1') === '1') {
if (cache()->has('core.avatar.' . $user_id)) {
$ud = cache()->get('core.avatar.' . $user_id);
} else {
$ud = \App\Plugins\User\src\Models\User::query()->where('id', $user_id)->first();
cache()->set('core.avatar.' . $user_id, $ud, $time);
}
} else {
$ud = \App\Plugins\User\src\Models\User::query()->where('id', $user_id)->first();
}

if ($ud->avatar) {
return $ud->avatar;
}

if (get_options('core_user_def_avatar', 'gavatar') !== 'ui-avatars') {
$url = get_options('theme_common_gavatar', 'https://cn.gravatar.com/avatar/') . md5($ud->email);
} else {
$url = 'https://ui-avatars.com/api/?background=random&format=svg&name=' . $ud->username;
}
return $url;
return super_avatar($user_data);
}
}

Expand Down
2 changes: 1 addition & 1 deletion app/Plugins/User/resources/views/fans.blade.php
Expand Up @@ -35,7 +35,7 @@
<div class="col-md-6 col-lg-3">
<div class="border-0 card">
<div class="card-body p-4 text-center">
{!! avatar($value->fans->id,"avatar-xl mb-3 avatar-rounded") !!}
<span class="avatar avatar-xl mb-3 avatar-rounded" style="background-image: url({{super_avatar($value->fans)}})"></span>
<h3 class="m-0 mb-1">
<a href="/users/{{$value->fans->username}}.html">{{$value->fans->username}}</a>
</h3>
Expand Down
2 changes: 1 addition & 1 deletion app/Plugins/User/resources/views/group_data.blade.php
Expand Up @@ -41,7 +41,7 @@
<div class="col-md-6" style="margin-bottom:5px">
<div class="row">
<div class="col-auto">
{!! avatar($value->id) !!}
<span class="avatar" style="background-image: url({{super_avatar($value)}})"></span>
</div>
<div class="col">
<a href="/users/{{$value->username}}.html" class="text-body d-block text-truncate"><b>{{$value->username}}</b></a>
Expand Down
2 changes: 1 addition & 1 deletion app/Plugins/User/resources/views/list.blade.php
Expand Up @@ -36,7 +36,7 @@
<div class="col-md-6 col-lg-3">
<div class="border-0 card">
<div class="card-body p-4 text-center">
{!! avatar($value->id,"avatar-xl mb-3 avatar-rounded") !!}
<span class="avatar avatar-xl mb-3 avatar-rounded" style="background-image: url({{super_avatar($value)}})"></span>
<h3 class="m-0 mb-1">
<a href="/users/{{$value->username}}.html">{{$value->username}}</a>
</h3>
Expand Down
149 changes: 69 additions & 80 deletions app/Plugins/User/src/Auth.php
@@ -1,5 +1,13 @@
<?php

declare(strict_types=1);
/**
* This file is part of zhuchunshu.
* @link https://github.com/zhuchunshu
* @document https://github.com/zhuchunshu/super-forum
* @contact laravel@88.com
* @license https://github.com/zhuchunshu/super-forum/blob/master/LICENSE
*/
namespace App\Plugins\User\src;

use App\Plugins\User\src\Event\AfterLogin;
Expand All @@ -14,131 +22,112 @@

class Auth
{

public function SignIn(string $email, string $password): bool
{
if (! User::query()->where('email', $email)->count()) {
return false;
}
// 数据库里的密码
$user_id = User::query()->where('email', $email)->first()->id;
$user = User::query()->find($user_id);
$user = User::query()->find($user_id);

if (Hash::check($password, $user->password)) {
$token = Str::random(17);
session()->set('auth', $token);
if(!(new UserAuth())->create($user->id,$token)){
return false;
if (! (new UserAuth())->create($user->id, $token)) {
return false;
}
session()->set("auth_data",User::query()->where("id",$this->id())->with("Class")->first());
session()->set("auth_data_class",UserClass::query()->where("id",auth()->data()->class_id)->first());
session()->set("auth_data_options",UsersOption::query()->where("id",auth()->data()->options_id)->first());
EventDispatcher()->dispatch(new AfterLogin($user));
EventDispatcher()->dispatch(new AfterLogin($user));
return true;
}
return false;
}

// 刷新登陆
public function refresh(int $id): bool
{
if (! User::query()->where('id', $id)->count()) {
return false;
}
// 数据库里的密码
$user = User::query()->find($id);
$token = Str::random(17);
session()->set('auth', $token);
(new UserAuth())->create($user->id, $token);
EventDispatcher()->dispatch(new AfterLogin($user));
return true;
}

public function SignInUsername(string $username, string $password): bool
{
if (! User::query()->where('username', $username)->count()) {
return false;
}
// 数据库里的密码
$user = User::query()->where('username', $username)->first();
if (Hash::check($password, $user->password)) {
$token = Str::random(17);
session()->set('auth', $token);
(new UserAuth())->create($user->id, $token);
EventDispatcher()->dispatch(new AfterLogin($user));
return true;
}
return false;
}

// 刷新登陆
public function refresh(int $id): bool
{
if (! User::query()->where('id', $id)->count()) {
return false;
}
// 数据库里的密码
$user = User::query()->find($id);
$token = Str::random(17);
session()->set('auth', $token);
(new UserAuth())->create($user->id,$token);
session()->set("auth_data",User::query()->where("id",$this->id())->with("Class")->first());
session()->set("auth_data_class",UserClass::query()->where("id",auth()->data()->class_id)->first());
session()->set("auth_data_options",UsersOption::query()->where("id",auth()->data()->options_id)->first());
EventDispatcher()->dispatch(new AfterLogin($user));
return true;
}

public function SignInUsername(string $username, string $password): bool
{
if (! User::query()->where('username', $username)->count()) {
return false;
}
// 数据库里的密码
$user = User::query()->where('username', $username)->first();
if (Hash::check($password, $user->password)) {
$token = Str::random(17);
session()->set('auth', $token);
(new UserAuth())->create($user->id,$token);
session()->set("auth_data",User::query()->where("id",$this->id())->with("Class")->first());
session()->set("auth_data_class",UserClass::query()->where("id",auth()->data()->class_id)->first());
session()->set("auth_data_options",UsersOption::query()->where("id",auth()->data()->options_id)->first());
EventDispatcher()->dispatch(new AfterLogin($user));
return true;
}
return false;
}

public function token(){
if($this->check()===true){
return session()->get("auth",null);
public function token()
{
if ($this->check() === true) {
return session()->get('auth', null);
}
return null;
}

public function logout(): bool
{
EventDispatcher()->dispatch(new Logout($this->id()));
EventDispatcher()->dispatch(new Logout($this->id()));
(new UserAuth())->destroy_token(session()->get('auth'));
session()->remove('auth');
session()->remove('auth_data_class');
session()->remove('auth_data_options');
session()->remove('auth_data');
return true;
}

public function data()
public function data(): \Hyperf\Database\Model\Collection|\Hyperf\Database\Model\Model|array|\Hyperf\Database\Model\Builder|null
{
if(!session()->has("auth_data")){
session()->set("auth_data",User::query()->where("id",$this->id())->with("Class")->first());
}
return session()->get("auth_data");
return User::query()->find($this->id());
}

public function Class(){
if(!session()->has("auth_data_class")){
session()->set("auth_data_class",UserClass::query()->where("id",auth()->data()->class_id)->first());
}
return session()->get("auth_data_class");
}

public function Options(){
if(!session()->has("auth_data_options")){
session()->set("auth_data_options",UsersOption::query()->where("id",auth()->data()->options_id)->first());
}
return session()->get("auth_data_options");
public function Class(): \Hyperf\Database\Model\Model|\Hyperf\Database\Model\Builder|null
{
return UserClass::query()->where('id', auth()->data()->class_id)->first();
}

public function UpdateClass(){
session()->set("auth_data_class",UserClass::query()->where("id",auth()->data()->class_id)->first());
public function Options(): \Hyperf\Database\Model\Model|\Hyperf\Database\Model\Builder|null
{
return UsersOption::query()->where('id', auth()->data()->options_id)->first();
}

public function UpdateOptions(){
session()->set("auth_data_options",UsersOption::query()->where("id",auth()->data()->options_id)->first());
}

/**
* get user id.
* @return int
*/
public function id()
{
return (int)@UsersAuth::query()->where("token",session()->get('auth'))->first('user_id')->user_id;
return (int) @UsersAuth::query()->where('token', session()->get('auth'))->first('user_id')->user_id;
}

/**
* check is login.
*/
public function check(): bool
{
if(!session()->has('auth')){
if (! session()->has('auth')) {
return false;
}
if(User::query()->where("id",$this->id())->count()){
if (User::query()->where('id', $this->id())->count()) {
return true;
}

return false;
}
}
}
10 changes: 0 additions & 10 deletions app/Plugins/User/src/Controller/ApiController.php
Expand Up @@ -69,16 +69,6 @@ public function up_file(FileUpload $uploader)
return $data;
}

#[PostMapping(path: '/api/user/@user_list')]
public function user_list(): array
{
$data = User::query()->select('username', 'id')->get();
$arr = [];
foreach ($data as $key => $value) {
$arr[$key] = ['value' => '@' . $value->username, 'html' => '<img src="' . avatar_url($value->id) . '" alt="' . $value->username . '"/> ' . $value->username];
}
return $arr;
}

#[PostMapping(path: '/api/user/@has_user_username/{username}')]
public function has_user_username($username): array
Expand Down
Expand Up @@ -66,7 +66,7 @@ class="hvr-icon-bounce cursor-pointer text-muted" data-bs-toggle="tooltip" data-
@if($i<=5)
<span data-bs-toggle="modal" data-bs-target="#topic-updated"
class="avatar avatar-sm avatar-rounded"
style="--tblr-avatar-size:25px;background-image:url({{avatar_url($v->user_id)}})"></span>
style="--tblr-avatar-size:25px;background-image:url({{super_avatar($v->user)}})"></span>
@php
$i++;
@endphp
Expand Down Expand Up @@ -97,7 +97,7 @@ class="avatar avatar-sm avatar-rounded"
<li>
<div class="list-timeline-icon"><!-- Download SVG icon from http://tabler-icons.io/i/brand-twitter -->
<!-- SVG icon code -->
<a href="/users/{{$value->user->username}}.html" class="avatar avatar-rounded" style="background-image: url('{{avatar_url($value->user_id)}}')"></a>
<a href="/users/{{$value->user->username}}.html" class="avatar avatar-rounded" style="background-image: url('{{super_avatar($value->user)}}')"></a>
</div>
<div class="list-timeline-content">
<div class="list-timeline-time">{{format_date($value->created_at)}}</div>
Expand Down
Expand Up @@ -70,7 +70,7 @@
<div class="card-title">修改头像</div>
<div class="mb-3">
<label class="form-label">当前头像
<div>{!! avatar(auth()->data()->id) !!}</div>
<div><span class="avatar" style="background-image: url({{super_avatar(auth()->data())}})"></span></div>
</label>
</div>
<div class="mb-3">
Expand Down

0 comments on commit 3bdb091

Please sign in to comment.