validate([ 'phone' => ['bail', 'required', Rule::unique(User::class)], 'password' => ['bail', 'required', 'string', 'min:6', 'max:32'], 'verify_code' => ['bail', 'required', 'string'], 'code' => ['bail', 'nullable', 'string'], ]); // @todo 验证短信验证码 $inviter = null; if ( $request->filled('code') && is_null($inviter = UserInfo::where('code', $request->input('code'))->first()) ) { throw new BizException(__('Invalid invitation code')); } $time = now(); $ip = $request->realIp(); try { DB::beginTransaction(); $user = new User($request->only(['phone', 'password'])); $user->phone_verified_at = $time; $user->register_ip = $ip; $user->last_login_at = $time; $user->last_login_ip = $ip; $user->setCreatedAt($time); $user->setUpdatedAt($time); $user->save(); $user->userInfo()->create([ 'inviter_id' => $inviter?->id, ]); DB::commit(); } catch (Throwable $e) { DB::rollBack(); report($e); throw new BizException(__('Registration failed, please try again')); } return response()->json( $user->createDeviceToken(Device::UNIAPP) ); } }