2025-02-15 12:13:10 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace app\controller\api\v1;
|
|
|
|
|
|
|
|
use support\Request;
|
|
|
|
|
|
|
|
use App\Utils\ApiResponse;
|
|
|
|
use hg\apidoc\annotation as Apidoc;
|
|
|
|
|
|
|
|
use Tinywan\Jwt\JwtToken;
|
2025-02-16 00:28:13 +08:00
|
|
|
use App\model\User;
|
2025-02-15 12:13:10 +08:00
|
|
|
use App\model\Message;
|
|
|
|
use App\dao\UserDao;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Apidoc\Title("用户控制器")
|
|
|
|
*/
|
|
|
|
class UserController
|
|
|
|
{
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 不需要登录的方法
|
|
|
|
*/
|
|
|
|
protected $noNeedLogin = ['login', 'register'];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Apidoc\Title("1.0 登录")
|
|
|
|
* @Apidoc\Url("api/v1/user/login")
|
|
|
|
* @Apidoc\Method("POST")
|
|
|
|
* @Apidoc\Param("phone", type="string",require=true, desc="用户名|手机号")
|
|
|
|
* @Apidoc\Param("password", type="string",require=true, desc="密码")
|
|
|
|
* @Apidoc\Returned("user", type="object", desc="用户信息")
|
|
|
|
* @Apidoc\Returned("token", type="object", desc="令牌")
|
|
|
|
*/
|
|
|
|
public function login(Request $request)
|
|
|
|
{
|
|
|
|
// 获取请求数据
|
|
|
|
$data = $request->post();
|
|
|
|
|
|
|
|
// 根据手机号查询用户
|
2025-02-16 00:28:13 +08:00
|
|
|
$db = User::where('phone', '=', $data['phone'])->first();
|
2025-02-15 12:13:10 +08:00
|
|
|
|
|
|
|
// 如果未找到用户,返回错误
|
|
|
|
if (!$db) {
|
|
|
|
return ApiResponse::error(402, '用户未注册');
|
|
|
|
}
|
|
|
|
|
|
|
|
// 获取用户输入的密码
|
|
|
|
$password = $data['password'];
|
|
|
|
|
|
|
|
// 验证密码是否正确
|
|
|
|
if (password_verify($password, $db->password)) {
|
|
|
|
$user = [
|
|
|
|
'id' => $db->id,
|
|
|
|
'nickname' => $db->nickname,
|
|
|
|
'phone' => $db->phone
|
|
|
|
];
|
|
|
|
// 如果密码正确,生成 JWT 令牌
|
|
|
|
$token = JwtToken::generateToken($user);
|
|
|
|
|
|
|
|
// 返回成功响应和用户信息(可以将 token 添加到响应中)
|
|
|
|
return ApiResponse::success(200, [
|
|
|
|
'user' => $user, // 返回用户信息
|
|
|
|
'token' => $token // 返回生成的 token
|
|
|
|
]);
|
|
|
|
} else {
|
|
|
|
// 密码错误,返回错误响应
|
|
|
|
return ApiResponse::error(402, '密码错误');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @Apidoc\Title("1.0 注册")
|
|
|
|
* @Apidoc\Url("api/v1/user/register")
|
|
|
|
* @Apidoc\Method("POST")
|
|
|
|
* @Apidoc\Param("phone", type="string",require=true, desc="用户名|手机号")
|
|
|
|
* @Apidoc\Param("password", type="string",require=true, desc="密码")
|
|
|
|
* @Apidoc\Param("idcard", type="string",require=true, desc="身份证号")
|
|
|
|
* @Apidoc\Returned("token", type="object", desc="令牌")
|
|
|
|
*/
|
|
|
|
public function register(Request $request)
|
|
|
|
{
|
|
|
|
$data = $request->post();
|
|
|
|
$user = UserDao::register($data['phone'], $data['password'], $data['idcard']);
|
|
|
|
if ($user['code'] != 200) {
|
|
|
|
return ApiResponse::error(402, [], $user['message']);
|
|
|
|
}
|
2025-02-16 00:28:13 +08:00
|
|
|
$db = User::where('phone', '=', $data['phone'])->first();
|
2025-02-15 12:13:10 +08:00
|
|
|
$user = [
|
|
|
|
'id' => $db->id,
|
|
|
|
'nickname' => $db->nickname,
|
|
|
|
'phone' => $db->phone
|
|
|
|
];
|
|
|
|
// 如果密码正确,生成 JWT 令牌
|
|
|
|
$token = JwtToken::generateToken($user);
|
|
|
|
$msg = new Message();
|
|
|
|
$msg->title ="系统提醒";
|
|
|
|
$msg->content = "您已注册成功";
|
|
|
|
$msg->type =0;
|
|
|
|
$msg->userid =$db->id;
|
|
|
|
$msg->parameters="";
|
|
|
|
// 返回成功响应和用户信息(可以将 token 添加到响应中)
|
|
|
|
return ApiResponse::success(200, [
|
|
|
|
'user' => $user, // 返回用户信息
|
|
|
|
'token' => $token // 返回生成的 token
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Apidoc\Title("1.0 修改用户信息")
|
|
|
|
* @Apidoc\Url("api/v1/user/edi")
|
|
|
|
* @Apidoc\Method("POST")
|
|
|
|
* @Apidoc\Param("nickname", type="string",require=true, desc="昵称")
|
|
|
|
* @Apidoc\Param("oldpassword", type="string",require=true, desc="旧密码")
|
|
|
|
* @Apidoc\Param("password", type="string",require=true, desc="密码")
|
|
|
|
*/
|
|
|
|
public function edi(Request $request)
|
|
|
|
{
|
|
|
|
$data = $request->post();
|
|
|
|
$user = $request->data;
|
|
|
|
$userid = $user['id'];
|
2025-02-16 00:28:13 +08:00
|
|
|
$db = User::where('id', '=', $userid)->first();
|
2025-02-15 12:13:10 +08:00
|
|
|
if (isset($data['password']) && $data['password'] != '') {
|
|
|
|
if (password_verify($data['oldpassword'], $db->password)) {
|
|
|
|
UserDao::chang_passwd($userid, $data['password']);
|
|
|
|
return ApiResponse::success(200, [], "修改密码成功");
|
|
|
|
}
|
|
|
|
return ApiResponse::success(402, [], "旧密码错误");
|
|
|
|
}
|
|
|
|
if (isset($data['nickname']) && $data['nickname'] != '') {
|
|
|
|
UserDao::chang_nickname($userid, $data['nickname']);
|
|
|
|
|
|
|
|
$user = [
|
|
|
|
'id' => $db->id,
|
|
|
|
'nickname' => $data['nickname'],
|
|
|
|
];
|
|
|
|
// 返回成功响应和用户信息(可以将 token 添加到响应中)
|
|
|
|
return ApiResponse::success(200, [
|
|
|
|
'user' => $user, // 返回用户信息
|
|
|
|
]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2025-02-16 00:28:13 +08:00
|
|
|
|
2025-02-15 12:13:10 +08:00
|
|
|
}
|