data_center/app/api/logic/LoginLogic.php

133 lines
4.7 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\api\logic;
use app\common\cache\UserTokenCache;
use app\common\logic\BaseLogic;
use app\api\service\UserTokenService;
use app\common\model\auth\Admin;
use app\common\service\ConfigService;
use app\common\model\user\User;
use think\facade\Config;
use think\facade\Db;
use think\facade\Log;
/**
* 登录逻辑
* Class LoginLogic
* @package app\api\logic
*/
class LoginLogic extends BaseLogic
{
// 账号密码注册
public static function register(array $params): bool
{
//创建密码和默认头像
$passwordSalt = Config::get('project.unique_identification');
$adminPassword = create_password($params['phone'], $passwordSalt);
$userPassword = create_password($params['password'], $passwordSalt);
$avatar = env('project.web_domain').'/'.ConfigService::get('default_image', 'user_avatar');
Db::startTrans();
try {
//添加到管理员表
$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
]);
//添加到用户表
$user = User::create([
'admin_id' => $admin['id'],
'phone' => $params['phone'],
'nick_name' => '用户'.$params['phone'],
'password' => $userPassword,
'avatar' => empty($params['avatar']) ? $avatar : $params['avatar'],
'age' => empty($params['age']) ? 0 : $params['age'],
'gender' => empty($params['gender']) ? 0 : $params['gender'],
'real_name' => empty($params['real_name']) ? '' : $params['real_name'],
'id_card' => empty($params['id_card']) ? '' : $params['id_card'],
'province' => empty($params['province']) ? 0 : $params['province'],
'city' => empty($params['city']) ? 0 : $params['city'],
'area' => empty($params['area']) ? 0 : $params['area'],
'street' => empty($params['street']) ? 0 : $params['street'],
'village' => empty($params['village']) ? 0 : $params['village'],
'brigade' => empty($params['brigade']) ? 0 : $params['brigade'],
'address' => empty($params['address']) ? '' : $params['address'],
]);
if(!empty($admin['id']) && !empty($user['id'])){
Db::commit();
return true;
}else{
Db::rollback();
return false;
}
} catch (\Exception $e) {
Db::rollback();
Log::error($e->getMessage());
self::setError($e->getMessage());
return false;
}
}
// 账号/手机号登录,手机号验证码
public static function login($params): bool|array
{
try {
$where = ['phone' => $params['account']];
$user = User::field('id')->where($where)->findOrEmpty();
//更新登录信息
$user->last_login_time = time();
$user->last_login_ip = request()->ip();
$user->save();
//设置token
$userInfo = UserTokenService::setToken($user->id,0);
return [
'uid' => $userInfo['user_id'],
'phone' => $userInfo['phone'],
'token' => $userInfo['token'],
];
} catch (\Exception $e) {
//记录日志
Log::error($e->getMessage());
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) || $userInfo['user_id'] != $params['uid']){
self::setError('token无效');
return false;
}
return [
'uid' => $userInfo['user_id'],
'phone' => $userInfo['phone'],
'token' => $userInfo['token'],
];
} catch (\Exception $e) {
//记录日志
Log::error($e->getMessage());
self::setError($e->getMessage());
return false;
}
}
}