Home > front end >  Allow user to register using code in laravel
Allow user to register using code in laravel

Time:07-11

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);
    }

CodePudding user response:

Make a custom validation rule to verify code and check if the code is already used.

$redeemer->verifyCoupon($code);
$redeemer->isCouponAlreadyUsed($code);

CodePudding user response:

I don't see anything that is not explained in the Laravel Couponables package that you are using it clearly has explanations on the GitHub:

Listeners

If you go event-driven, you can handle package events:

CouponVerified

CouponRedeemed

CouponExpired

CouponIsOverLimit

CouponIsOverQuantity

NotAllowedToRedeem

FailedToRedeemCoupon

All the exceptions are well explained in the documentation

If something's going wrong, methods verifyCoupon and redeemCoupon will throw an exception:

CouponExpiredException      // Coupon is expired (`expires_at` column).
InvalidCouponException      // Coupon is not found in the database.
NotAllowedToRedeemException // Coupon is assigned to the specific model (`redeemer` morphs).
OverLimitException          // Coupon is over the limit for the specific model (`limit` column).
OverQuantityException       // Coupon is exhausted (`quantity` column).
CouponException    

You can simply replace this line from your code:

$user->redeemCoupon($request->code);

To this:

$user->redeemCouponOr($request->code, function ($exception) {
    // Your action with $exception!
    print('This coupon is no longer valid'); //
});

CodePudding user response:

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'
         ]);
  • Related