data_center/app/api/logic/LoginLogic.php

131 lines
4.3 KiB
PHP
Raw Normal View History

2023-09-18 09:11:13 +08:00
<?php
namespace app\api\logic;
use app\common\cache\UserTokenCache;
use app\common\logic\BaseLogic;
use app\api\service\UserTokenService;
2023-09-18 17:51:25 +08:00
use app\common\model\auth\Admin;
2023-09-18 09:11:13 +08:00
use app\common\service\ConfigService;
use app\common\model\user\User;
use think\facade\Config;
2023-09-18 17:51:25 +08:00
use think\facade\Db;
2023-09-18 17:04:42 +08:00
use think\facade\Log;
2023-09-18 09:11:13 +08:00
/**
* 登录逻辑
* Class LoginLogic
* @package app\api\logic
*/
class LoginLogic extends BaseLogic
{
// 账号密码注册
public static function register(array $params): bool
{
//创建密码和默认头像
$passwordSalt = Config::get('project.unique_identification');
2023-09-18 17:51:25 +08:00
$adminPassword = create_password($params['phone'], $passwordSalt);
$userPassword = create_password($params['password'], $passwordSalt);
2023-09-18 09:11:13 +08:00
$avatar = env('project.web_domain').'/'.ConfigService::get('default_image', 'user_avatar');
2023-09-18 17:51:25 +08:00
(new Db)->startTrans();
2023-09-18 09:11:13 +08:00
try {
2023-09-18 17:51:25 +08:00
//添加到管理员表
$admin = Admin::create([
'root' => 0,
'name' => '用户'.$params['phone'],
'avatar' => empty($params['avatar']) ? $avatar : $params['avatar'],
'account' => $params['phone'],
'password' => $adminPassword,
'multipoint_login' => 1,
'disable' => 0
2023-09-18 09:11:13 +08:00
]);
2023-09-18 17:51:25 +08:00
//添加到用户表
$user = User::create([
'admin_id' => $admin['id'],
'phone' => $params['phone'],
'nickname' => '用户'.$params['phone'],
'password' => $userPassword,
'avatar' => empty($params['avatar']) ? $avatar : $params['avatar'],
'age' => $params['age'],
'gender' => $params['gender'],
'province' => $params['province'],
'city' => $params['city'],
'area' => $params['area'],
'street' => $params['street'],
'village' => $params['village'],
'brigade' => $params['brigade'],
'address' => $params['address'],
]);
if(!empty($admin['id']) && !empty($user['id'])){
(new Db)->commit();
return true;
}else{
(new Db)->rollback();
return false;
}
2023-09-18 09:11:13 +08:00
} catch (\Exception $e) {
2023-09-18 17:51:25 +08:00
(new Db)->rollback();
2023-09-18 17:04:42 +08:00
Log::error($e->getMessage());
2023-09-18 09:11:13 +08:00
self::setError($e->getMessage());
return false;
}
}
// 账号/手机号登录,手机号验证码
public static function login($params): bool|array
{
try {
2023-09-18 17:51:25 +08:00
$where = ['phone' => $params['account']];
2023-09-18 09:11:13 +08:00
$user = User::field('id')->where($where)->findOrEmpty();
//更新登录信息
2023-09-18 17:51:25 +08:00
$user->last_login_time = time();
$user->last_login_ip = request()->ip();
2023-09-18 09:11:13 +08:00
$user->save();
//设置token
$userInfo = UserTokenService::setToken($user->id,0);
return [
'user_id' => $userInfo['user_id'],
'phone' => $userInfo['phone'],
'token' => $userInfo['token'],
];
} catch (\Exception $e) {
2023-09-18 17:04:42 +08:00
//记录日志
Log::error($e->getMessage());
2023-09-18 09:11:13 +08:00
self::setError($e->getMessage());
return false;
}
}
// 退出登录
public static function logout($userInfo): bool
{
//token不存在不注销
if (!isset($userInfo['token'])) {
return false;
}
//设置token过期
return UserTokenService::expireToken($userInfo['token']);
}
// 验证token
public static function verifyToken($params): bool|array
{
try {
$userInfo = (new UserTokenCache())->getUserInfo($params['token']);
if(empty($userInfo)){
self::setError('token无效');
return false;
}
return [
'user_id' => $userInfo['user_id'],
'phone' => $userInfo['phone'],
'token' => $userInfo['token'],
];
} catch (\Exception $e) {
2023-09-18 17:04:42 +08:00
//记录日志
Log::error($e->getMessage());
2023-09-18 09:11:13 +08:00
self::setError($e->getMessage());
return false;
}
}
}