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.
109 lines
3.2 KiB
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 和用户信息
|
|
}
|
|
}
|