validate([ 'username' => 'required|string|max:20', 'password' => 'required|string|max:20', ], [ 'username.required' => '请输入登录账号', 'password.required' => '请输入登录密码', ]); $store = StoreModel::where('username', $validated['username'])->first(); if ($store === null || ! password_verify($validated['password'], (string) $store->password)) { return $this->error('账号或密码错误'); } if ($store->status === StoreModel::STATUS_DISABLED) { return $this->error('账号已被停用,请联系客服处理'); } $store->last_login_at = date('Y-m-d H:i:s'); $store->save(); $token = $store->createToken($store->username)->toArray(); $store->load('level:id,name'); return $this->success([ 'token' => $token['plainTextToken'], 'user' => $store->toArray(), ], __('user.login_success')); } /** 当前门店信息(含客户等级) */ #[GetRoute('/auth/info')] public function info(Request $request): JsonResponse { $store = StoreModel::with('level:id,name')->find($request->user()->id); if ($store === null) { throw new RepositoryException('账号不存在'); } return $this->success($store->toArray()); } /** 修改登录密码 */ #[PutRoute('/auth/password')] public function setPassword(Request $request): JsonResponse { $data = $request->validate([ 'oldPassword' => 'required|string|max:20', 'newPassword' => 'required|string|min:6|max:20', 'rePassword' => 'required|same:newPassword', ], [ 'oldPassword.required' => '请输入原密码', 'newPassword.required' => '请输入新密码', 'newPassword.min' => '新密码至少 6 位', 'rePassword.same' => '两次输入的密码不一致', ]); $store = $this->currentStore($request); if (! password_verify($data['oldPassword'], (string) $store->password)) { return $this->error('原密码不正确'); } $store->password = password_hash($data['newPassword'], PASSWORD_DEFAULT); $store->save(); return $this->success([], '密码修改成功'); } }