all(), [ 'first_name' => 'required|string', 'last_name' => 'required|string', 'phone' => 'required|digits:8|unique:customers,phone', 'password' => 'required|min:6', 'gender' => 'in:Male,Female', 'device_name'=> 'required' ]); if ($validation->fails()) { return response()->json(['errors'=>$validation->getMessageBag()->all()],422); } $data = [ 'first_name' => $request->get('first_name'), 'last_name' => $request->get('last_name'), 'phone' => $request->get('phone'), 'password' => bcrypt($request->get('password')), 'channel_id' => core()->getCurrentChannel()->id, 'is_verified' => 1, 'gender' => $request->get('gender'), 'customer_group_id' => $this->customerGroupRepository->findOneWhere(['code' => 'general'])->id ]; Event::dispatch('customer.registration.before'); $customer = $this->customerRepository->create($data); Event::dispatch('customer.registration.after', $customer); if (! $jwtToken = auth()->guard($this->guard)->attempt($request->only(['phone', 'password']))) { return response()->json([ 'error' => 'Invalid Email or Password', ], 401); } Event::dispatch('customer.after.login', $request->get('phone')); return response([ 'data' => new \Webkul\RestApi\Http\Resources\V1\Shop\Customer\CustomerResource($customer), 'message' => 'Registered in successfully.', 'token' => $customer->createToken($request->device_name, ['role:customer'])->plainTextToken, ]); } /** * Method to store user's sign up form data to DB. * * @return \Illuminate\Http\Response */ public function login(Request $request) { $validation = Validator::make($request->all(), [ 'phone' => 'required|digits:8', 'password' => 'required|min:6', 'device_name' => 'required', ]); if ($validation->fails()) { return response()->json(['errors'=>$validation->getMessageBag()->all()],422); } $customer = $this->customerRepository->where('phone', $request->phone)->first(); if (! $customer || ! Hash::check($request->password, $customer->password)) { return response()->json([ 'error' => 'The provided credentials are incorrect.', ], 401); } Event::dispatch('customer.after.login', $request->get('phone')); /** * Preventing multiple token creation. */ $customer->tokens()->delete(); return response([ 'data' => new \Webkul\RestApi\Http\Resources\V1\Shop\Customer\CustomerResource($customer), 'message' => 'Logged in successfully.', 'token' => $customer->createToken($request->device_name, ['role:customer'])->plainTextToken, ]); } /** * Update the specified resource in storage. * * @return \Illuminate\Http\Response */ public function store(Request $request) { $customer = $request->user(); $validation = Validator::make($request->all(), [ 'first_name' => 'required', 'last_name' => 'required', 'gender' => 'in:Male,Female', 'date_of_birth' => 'nullable|date|before:today', 'email' => 'email|unique:customers,email,' . $customer->id, 'phone' => 'digits:8|unique:customers,phone,' . $customer->id, 'password' => 'min:6', ]); if ($validation->fails()) { return response()->json(['errors'=>$validation->getMessageBag()->all()],422); } $data = request()->only('first_name', 'last_name', 'gender', 'date_of_birth', 'email', 'password','phone'); if (! isset($data['password']) || ! $data['password']) { unset($data['password']); } else { $data['password'] = bcrypt($data['password']); } $updatedCustomer = $this->customerRepository->update($data, $customer->id); return response()->json([ 'message' => 'Your account has been updated successfully.', 'data' => new CustomerResource($updatedCustomer), ]); } }