validated(); $smsCodeService->validate( $input['phone'], SmsCode::TYPE_REGISTER, $input['verify_code'] ); $time = now(); $ip = $request->realIp(); $inviter = $this->findUserByCode((string) Arr::get($input, 'code')); try { DB::beginTransaction(); $user = User::create( array_merge($input, [ 'phone_verified_at' => $time, 'register_ip' => $ip, 'last_login_at' => $time, 'last_login_ip' => $ip, ]), $inviter ); DB::commit(); } catch (Throwable $e) { DB::rollBack(); report($e); throw new BizException(__('Registration failed, please try again')); } return response()->json( $user->createDeviceToken(Device::UNIAPP) ); } /** * 通过邀请码搜索用户 * * @param string $code * @return \App\Models\User|null * * @throws \App\Exceptions\BizException */ protected function findUserByCode(string $code): ?User { if ($code === '') { return null; } $user = User::when(PhoneNumber::validate($code), function ($query) use ($code) { $query->where('phone', $code); }, function ($query) use ($code) { $query->whereRelation('userInfo', 'code', $code); })->first(); if ($user === null) { throw new BizException(__('Inviter does not exist')); } return $user; } }