nicer package layout, also in checkout step 1, fixed missing registration language strings, registration error handling, email verification redirect, email verification error handling and messaging,
This commit is contained in:
@@ -15,8 +15,18 @@ class EmailVerificationPromptController extends Controller
|
||||
*/
|
||||
public function __invoke(Request $request): Response|RedirectResponse
|
||||
{
|
||||
return $request->user()->hasVerifiedEmail()
|
||||
? redirect()->intended(route('dashboard', absolute: false))
|
||||
: Inertia::render('auth/verify-email', ['status' => $request->session()->get('status')]);
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
$redirectToCheckout = $request->session()->pull('checkout.verify_redirect');
|
||||
|
||||
if ($redirectToCheckout) {
|
||||
$separator = str_contains($redirectToCheckout, '?') ? '&' : '?';
|
||||
|
||||
return redirect()->to($redirectToCheckout.$separator.'verified=1');
|
||||
}
|
||||
|
||||
return redirect()->intended(route('dashboard', absolute: false));
|
||||
}
|
||||
|
||||
return Inertia::render('auth/verify-email', ['status' => $request->session()->get('status')]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,61 @@ class VerifyEmailController extends Controller
|
||||
*/
|
||||
public function __invoke(EmailVerificationRequest $request): RedirectResponse
|
||||
{
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
|
||||
if (! $request->user()->hasVerifiedEmail()) {
|
||||
$request->fulfill();
|
||||
}
|
||||
|
||||
$request->fulfill();
|
||||
return $this->redirectAfterVerification($request);
|
||||
}
|
||||
|
||||
return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
|
||||
protected function redirectAfterVerification(EmailVerificationRequest $request): RedirectResponse
|
||||
{
|
||||
$redirectToCheckout = $request->session()->pull('checkout.verify_redirect');
|
||||
|
||||
if (! $redirectToCheckout && $request->user()->pending_purchase) {
|
||||
$packageId = $request->session()->pull('checkout.pending_package_id');
|
||||
|
||||
if (! $packageId) {
|
||||
$packageId = optional($request->user()->tenant)
|
||||
?->packages()
|
||||
->latest('tenant_packages.created_at')
|
||||
->value('packages.id');
|
||||
}
|
||||
|
||||
if ($packageId) {
|
||||
$redirectToCheckout = route('checkout.show', ['package' => $packageId]);
|
||||
}
|
||||
}
|
||||
|
||||
$this->flashVerificationSuccess($request, (bool) $redirectToCheckout);
|
||||
|
||||
if ($redirectToCheckout) {
|
||||
$request->session()->forget('checkout.pending_package_id');
|
||||
$separator = str_contains($redirectToCheckout, '?') ? '&' : '?';
|
||||
|
||||
return redirect()->to($redirectToCheckout.$separator.'verified=1');
|
||||
}
|
||||
|
||||
$fallbackLogin = route('marketing.login');
|
||||
$separator = str_contains($fallbackLogin, '?') ? '&' : '?';
|
||||
|
||||
return redirect()->intended($fallbackLogin.$separator.'verified=1');
|
||||
}
|
||||
|
||||
private function flashVerificationSuccess(EmailVerificationRequest $request, bool $forCheckout): void
|
||||
{
|
||||
$message = $forCheckout
|
||||
? __('auth.verification.checkout_success_message')
|
||||
: __('auth.verification.success_message');
|
||||
|
||||
$request->session()->flash('verification', [
|
||||
'status' => 'success',
|
||||
'title' => __('auth.verification.success_title'),
|
||||
'message' => $message,
|
||||
]);
|
||||
|
||||
if (! $forCheckout) {
|
||||
$request->session()->flash('status', __('auth.verification.success_message'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ class CheckoutController extends Controller
|
||||
|
||||
$package = Package::findOrFail($request->package_id);
|
||||
$validated = $validator->validated();
|
||||
DB::transaction(function () use ($request, $package, $validated) {
|
||||
$user = DB::transaction(function () use ($request, $package, $validated) {
|
||||
|
||||
// User erstellen
|
||||
$user = User::create([
|
||||
@@ -138,10 +138,28 @@ class CheckoutController extends Controller
|
||||
Mail::to($user)
|
||||
->locale($user->preferred_locale ?? app()->getLocale())
|
||||
->queue(new Welcome($user));
|
||||
|
||||
return $user;
|
||||
});
|
||||
|
||||
Auth::login($user);
|
||||
$request->session()->put('checkout.pending_package_id', $package->id);
|
||||
$redirectUrl = route('checkout.show', ['package' => $package->id]);
|
||||
$request->session()->put('checkout.verify_redirect', $redirectUrl);
|
||||
$request->session()->put('url.intended', $redirectUrl);
|
||||
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'message' => 'Registrierung erfolgreich. Bitte überprüfen Sie Ihre E-Mail zur Verifizierung.',
|
||||
'redirect' => $redirectUrl,
|
||||
'user' => [
|
||||
'id' => $user->id,
|
||||
'email' => $user->email,
|
||||
'name' => $user->name ?? trim($user->first_name.' '.$user->last_name),
|
||||
'pending_purchase' => $user->pending_purchase ?? true,
|
||||
'email_verified_at' => $user->email_verified_at,
|
||||
],
|
||||
'pending_purchase' => $user->pending_purchase ?? true,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user