diff --git a/README.md b/README.md index 7c8439a..74603e4 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Easy Email Confirmation for Your Laravel App - This composer package offers an easy way to add confiirmation email step for your Laravel applications. + This composer package offers an easy way to add confirmation email step for your Laravel applications. ## Installation @@ -55,7 +55,7 @@ Finally, to get a nice feedback message add this code to you login page @if (session('laraconfirmAlert'))
- {{ session('laraconfirmAlert') }} + {!! session('laraconfirmAlert') !!}
@endif // above the login form or anywhere you want diff --git a/src/Http/EmailConfirmationController.php b/src/Http/EmailConfirmationController.php index 8a00747..67f37af 100644 --- a/src/Http/EmailConfirmationController.php +++ b/src/Http/EmailConfirmationController.php @@ -2,8 +2,12 @@ namespace Devmi\Laraconfirm\Http; +use Mail; +use Carbon\Carbon; +use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Devmi\Laraconfirm\Models\EmailConfirmations; +use Devmi\Laraconfirm\Mail\AccountActivationEmail; class EmailConfirmationController extends Controller { @@ -14,8 +18,44 @@ public function activate($email, $token) if ($operation->exists()) { $operation->delete(); - return redirect()->route('login')->with('laraconfirmAlert', 'Your account has activated.'); + return redirect()->route('login')->with('laraconfirmAlert', 'Your account has been activated.'); }; abort(404); } + + public function showResendForm() + { + return view('Laraconfirm::emails.resend'); + } + + public function resend(Request $request) + { + $this->validateResendRequest($request); + + if ($this->tooManyResendRequestChecker($request)) { + return back()->withDanger('Too many requests, try again after 5 minutes.'); + } + + $email = $request->email; + $token = str_random(191); + EmailConfirmations::whereEmail($email)->update(['token' => $token]); + Mail::to($email)->send(new AccountActivationEmail($email, $token)); + + return back()->withSuccess('Account confirmation email has been resent.'); + } + + protected function tooManyResendRequestChecker($request) + { + $account = EmailConfirmations::whereEmail($request->email)->first(); + + return $account->updated_at->addMinute('5') > Carbon::now(); + } + + protected function validateResendRequest ($request) { + $this->validate($request, [ + 'email' => 'required|email|exists:email_confirmations,email' + ], [ + 'email.exists' => 'Could not find that account.' + ]); + } } diff --git a/src/Traits/LaraconfirmLoginTrait.php b/src/Traits/LaraconfirmLoginTrait.php index be8c20e..3b410e0 100644 --- a/src/Traits/LaraconfirmLoginTrait.php +++ b/src/Traits/LaraconfirmLoginTrait.php @@ -14,7 +14,11 @@ protected function authenticated(Request $request, $user) { if (EmailConfirmations::whereEmail($user->email)->exists()) { auth()->logout(); - return back()->with('laraconfirmAlert', 'Please confirm your email address before you login.'); + return back()->with( + 'laraconfirmAlert', + 'Please confirm your email address before you login. + resend email' + ); } } } diff --git a/src/Traits/LaraconfirmRegisterTrait.php b/src/Traits/LaraconfirmRegisterTrait.php index 95fee37..05b2a97 100644 --- a/src/Traits/LaraconfirmRegisterTrait.php +++ b/src/Traits/LaraconfirmRegisterTrait.php @@ -19,7 +19,10 @@ protected function registered(Request $request, $user) $this->handle($user->email); } - return redirect('/login')->with('laraconfirmAlert', 'We\'ve sent you a confirmation email at: ' . $user->email); + return redirect('/login')->with( + 'laraconfirmAlert', 'We\'ve sent you a confirmation email at: ' . $user->email . ' + , resend?' + ); } public function handle($email) diff --git a/src/routes.php b/src/routes.php index 8304444..2cd757d 100644 --- a/src/routes.php +++ b/src/routes.php @@ -1,6 +1,13 @@ middleware('web'); +Route::group(['middleware' => 'web'], function () { + Route::get( + '/email/confirmation/resend', 'Devmi\Laraconfirm\Http\EmailConfirmationController@showResendForm') + ->name('email.confirmation.resend'); +Route::post('/email/confirmation/resend', 'Devmi\Laraconfirm\Http\EmailConfirmationController@resend'); + + Route::get('/{email}/confirmation/{token}','Devmi\Laraconfirm\Http\EmailConfirmationController@activate'); + +}); + + diff --git a/src/views/emails/confirmation.blade.php b/src/views/emails/confirmation.blade.php index e67df86..5f2d1b9 100644 --- a/src/views/emails/confirmation.blade.php +++ b/src/views/emails/confirmation.blade.php @@ -5,7 +5,7 @@ By clicking on the following link, you are confirming your email address. @component('mail::button', ['url' => config('app.url') . '/' . $email . '/confirmation/' . $token ]) -Email confirmation +Confirm @endcomponent Thanks,
diff --git a/src/views/emails/partials/_alerts.blade.php b/src/views/emails/partials/_alerts.blade.php new file mode 100644 index 0000000..c3d1f68 --- /dev/null +++ b/src/views/emails/partials/_alerts.blade.php @@ -0,0 +1,11 @@ +@if (session('success')) +
+ {{ session('success') }} +
+@endif + +@if (session('danger')) +
+ {{ session('danger') }} +
+@endif diff --git a/src/views/emails/resend.blade.php b/src/views/emails/resend.blade.php new file mode 100644 index 0000000..7b15abd --- /dev/null +++ b/src/views/emails/resend.blade.php @@ -0,0 +1,47 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
Email confirmation resend
+ +
+ + @include('Laraconfirm::emails.partials._alerts'); + +
+ {{ csrf_field() }} + +
+ + +
+ + + @if ($errors->has('email')) + + {{ $errors->first('email') }} + + @endif +
+
+ +
+
+ + + Login + +
+
+
+
+
+
+
+
+@endsection