You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aquaculture/app/Http/Controllers/Api/V1/AuthController.php

109 lines
3.2 KiB

<?php
namespace App\Http\Controllers\Api\V1;
use App\Enums\UserSexEnum;
use App\Enums\UserStatusEnum;
use App\Exceptions\BadRequestException;
use App\Http\Controllers\Controller;
use App\Http\Requests\LoginRequest;
use App\Http\Requests\RegisterUserRequest;
use App\Http\Resources\OwnResource;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
class AuthController extends Controller
{
/**
* 登录的接口
*
* @param LoginRequest $request 登录请求数据
* @return \Illuminate\Http\JsonResponse 返回登录结果的 JSON 响应
*/
public function login(LoginRequest $request)
{
// 获取用户名和密码
$username = $request->input('username');
$password = $request->input('password');
// 查询用户
$user = User::query()
->whereNotNull('name')
->where('name', $username)
->first();
// 检查用户是否存在
if (is_null($user)) {
return responseJsonAsBadRequest('用户名或者密码错误');
}
// 验证密码是否正确
if (! Hash::check($password, $user->getAuthPassword())) {
return responseJsonAsBadRequest('用户名或者密码错误');
}
// 返回成功响应和 token
return responseJson(200, '登录成功', $this->getToken($user));
}
/**
* 注销的接口
*
* @return \Illuminate\Http\JsonResponse 返回注销结果的 JSON 响应
*/
public function logout()
{
// 注销用户
auth('api')->logout();
return responseJsonAsDeleted('注销成功');
}
/**
* 注册的接口
*
* @param RegisterUserRequest $request 注册请求数据
* @return \Illuminate\Http\JsonResponse 返回注册结果的 JSON 响应
*/
public function register(RegisterUserRequest $request)
{
// 获取用户名和密码
$username = $request->input('username');
$password = $request->input('password');
// 检查用户名是否已存在
if (User::query()->where('name', $username)->exists()) {
return responseJsonAsBadRequest('用户名已经存在, 请换一个用户名');
}
// 创建新用户
$user = new User();
$user->name = $username;
$user->password = Hash::make($password); // 确保密码被哈希处理
$user->sex = UserSexEnum::MAN; // 默认性别
$user->is_init_email = 1; // 初始化邮箱状态
$user->is_active = UserStatusEnum::ACTIVE; // 默认激活状态
$user->save(); // 保存用户信息
// 返回成功响应和 token
return responseJson(201, '注册成功', $this->getToken($user));
}
/**
* 拼接 token
*
* @param User $user 用户模型
* @return array 返回包含 token 的数组
*/
protected function getToken(User $user)
{
// 生成 token
$prefix = 'Bearer';
$token = auth('api')->login($user); // 登录并获取 token
$me = new OwnResource($user); // 创建用户资源
return compact('prefix', 'token', 'me'); // 返回 token 和用户信息
}
}