Search code examples
laravellaravel-9

Allow user to register using code in laravel


please I am trying to allow users to register with a coupon code, if coupon code is invalid dont register user, but when I tried it users are been registered even though the code is already used or invalid

I am using this package for the code https://github.com/michael-rubel/laravel-couponables

public function store(Request $request)
    {
        $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'username' => ['required', 'string', 'max:255', 'unique:users'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'confirmed', Rules\Password::defaults()],
        ]);

        $user = User::create([
            'username' => $request->username,
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);
        $user->redeemCoupon($request->code);
        event(new Registered($user));

        Auth::login($user);

        return redirect(RouteServiceProvider::HOME);
    }


Solution

  • You are already registering the user before checking if the coupon is valid. Move this line after the validation.

    $user->redeemCouponOr($request->code, function ($e) {
        //handle the different exceptions here if not valid.
    });
    $user = User::create([
                'username' => $request->username,
                'name' => $request->name,
                'email' => $request->email,
                'password' => Hash::make($request->password),
            ]);
    

    Or handle the validations inside the validator method

    $request->validate([
                ...
                'code' =>'sometimes|exists:coupon_table,coupon_code_column,coupon_status_column,!used_or_some_other_status'
             ]);