Files
crm-server/app/controller/UserController.php
T

154 lines
4.4 KiB
PHP
Raw Normal View History

2025-03-11 13:34:12 +08:00
<?php
namespace app\controller;
2025-03-14 14:27:33 +08:00
use app\model\User;
2025-03-14 17:10:14 +08:00
use app\service\MailService;
2025-03-14 14:27:33 +08:00
use app\util\JwtUtil;
use app\util\Util;
use support\Redis;
2025-03-11 13:34:12 +08:00
use support\Request;
class UserController
{
2025-03-14 14:27:33 +08:00
/**
* 不需要登录的方法
*/
2025-03-17 18:01:53 +08:00
protected $noNeedLogin = ['login', 'sendCode', 'register'];
2025-03-11 13:34:12 +08:00
public function login(Request $request)
{
2025-03-17 18:01:53 +08:00
$email = Util::getParam($request, 'email');
if (Util::isEmpty($email)) {
return Util::fail([], 'email' . trans('not_null'));
2025-03-14 14:27:33 +08:00
}
2025-03-17 18:01:53 +08:00
$password = Util::getParam($request, 'password');
if (Util::isEmpty($password)) {
return Util::fail([], 'password' . trans('not_null'));
2025-03-14 14:27:33 +08:00
}
2025-03-17 18:01:53 +08:00
$user = User::select(['id', 'name', 'sex', 'role', 'avatar', 'email', 'password'])
->where('status', 0)
->where('email', $request->post('email'))
2025-03-14 14:27:33 +08:00
->first();
2025-03-17 18:01:53 +08:00
if (!$user) {
return Util::fail(['user' => $user], trans('user_none'));
2025-03-14 14:27:33 +08:00
}
$user = $user->toArray();
$userPassword = $user['password'];
//加密
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
//验证密码
if (!password_verify($userPassword, $hashedPassword)) {
2025-03-17 18:01:53 +08:00
return Util::fail([], trans('password_error'));
2025-03-14 14:27:33 +08:00
}
$userId = $user['id']; // 实际从数据库获取
2025-03-17 18:01:53 +08:00
Redis::set('user_' . $userId, $user);
2025-03-14 14:27:33 +08:00
//密码验证成功后加密生成 Token
$token = JwtUtil::generateToken($userId);
$result = $user;
unset($result['password']);
$result['token'] = $token;
2025-03-17 18:01:53 +08:00
return Util::success($result, trans('login_success'));
2025-03-11 13:34:12 +08:00
}
2025-03-14 17:10:14 +08:00
/**
* 发送邮箱验证码
* @param Request $request
* @return \support\Response
* @throws \Random\RandomException
*/
public function sendCode(Request $request)
{
2025-03-17 18:01:53 +08:00
$email = Util::getParam($request,'email');
2025-03-14 17:10:14 +08:00
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
2025-03-17 18:01:53 +08:00
return Util::fail([], 'email' . trans('not_null'));
2025-03-14 17:10:14 +08:00
}
// 生成验证码
$code = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT);
// 发送邮件
$mailService = new MailService();
if ($mailService->sendVerificationCode($email, $code)) {
// 存储验证码到 Redis
Redis::set("verification_code:{$email}", $code, 300);
2025-03-17 18:01:53 +08:00
return Util::success([], '验证码已发送');
2025-03-14 17:10:14 +08:00
}
2025-03-17 18:01:53 +08:00
return Util::fail([], '邮件发送失败');
2025-03-14 17:10:14 +08:00
}
2025-03-17 18:01:53 +08:00
/**
* 注册
* @param Request $request
* @return \support\Response
* @throws \Random\RandomException
*/
public function register(Request $request)
{
$email = Util::getParam($request,'email','asdf');
$code = Util::getParam($request,'code');
$sex = Util::getParam($request,'sex',0);
$name = Util::getParam($request,'name',0);
$password = Util::getParam($request,'password');
$mobile = Util::getParam($request,'mobile');
$id = Util::getParam($request,'id');
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
return Util::fail([], 'email'.$email . trans('not_null'));
}
$res = User::select('id', 'email')
->where('email', $email)
->first();
// if (!Util::isEmpty($res)) {
// return Util::fail([], trans('email_repeat'));
// }
2025-03-14 17:10:14 +08:00
2025-03-17 18:01:53 +08:00
if (Util::isEmpty($name)) {
return Util::fail([], 'name' . trans('not_null'));
}
$verification_code = Redis::get("verification_code:{$email}");
if ($code != $verification_code) {
return Util::fail([], trans('code_error'));
}
//加密
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
$data = [
'mobile' => $mobile,
'email' => $email,
'name' => $name,
'sex' => $sex,
'role' => 1,
'password' => $hashedPassword,
];
if (Util::isEmpty($id)) {
$res = User::create($data);
} else {
$res = User::where('id', $id)
->update($data);
// Log::info('update', ['res' => $res]);
(!$res)?: $res=User::find($id)->toArray();
}
if ($res) {
return Util::success($res);
} else {
return Util::fail($res);
}
}
2025-03-14 17:10:14 +08:00
2025-03-11 13:34:12 +08:00
}