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')); } // 获取登录设备 $device = $request->header('client-app', Device::UNIAPP); switch ($device) { case Device::DEALER: $token = $user->createToken(Device::DEALER); break; default: $token = $user->createToken(Device::UNIAPP, ['mall']); break; } // $token = $user->createToken(Device::UNIAPP, ['mall']); return response()->json([ 'token' => $token->plainTextToken, ]); } /** * 通过邀请码搜索用户 * * @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; } }