Skip to content

Commit

Permalink
add resend confirmation email functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
MiloudiMohamed committed Sep 23, 2017
1 parent 670f007 commit ed9e9a5
Show file tree
Hide file tree
Showing 8 changed files with 122 additions and 10 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -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

Expand Down Expand Up @@ -55,7 +55,7 @@ Finally, to get a nice feedback message add this code to you login page

@if (session('laraconfirmAlert'))
<div class="alert alert-success">
{{ session('laraconfirmAlert') }}
{!! session('laraconfirmAlert') !!}
</div>
@endif
// above the login form or anywhere you want
Expand Down
42 changes: 41 additions & 1 deletion src/Http/EmailConfirmationController.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -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.'
]);
}
}
6 changes: 5 additions & 1 deletion src/Traits/LaraconfirmLoginTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -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.
<a href=' . route('email.confirmation.resend') . '>resend email</a>'
);
}
}
}
5 changes: 4 additions & 1 deletion src/Traits/LaraconfirmRegisterTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -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: <strong> ' . $user->email . '
</strong>, <a href=' . route('email.confirmation.resend') . '>resend?</a>'
);
}

public function handle($email)
Expand Down
15 changes: 11 additions & 4 deletions src/routes.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
<?php

Route::get(
'/{email}/confirmation/{token}',
'Devmi\Laraconfirm\Http\EmailConfirmationController@activate'
)->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');

});


2 changes: 1 addition & 1 deletion src/views/emails/confirmation.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -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,<br>
Expand Down
11 changes: 11 additions & 0 deletions src/views/emails/partials/_alerts.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@if (session('success'))
<div class="alert alert-info">
{{ session('success') }}
</div>
@endif

@if (session('danger'))
<div class="alert alert-danger">
{{ session('danger') }}
</div>
@endif
47 changes: 47 additions & 0 deletions src/views/emails/resend.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
@extends('layouts.app')

@section('content')
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Email confirmation resend</div>

<div class="panel-body">

@include('Laraconfirm::emails.partials._alerts');

<form class="form-horizontal" method="POST" action="{{ route('email.confirmation.resend') }}">
{{ csrf_field() }}

<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<label for="email" class="col-md-4 control-label">E-Mail Address</label>

<div class="col-md-6">
<input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required>

@if ($errors->has('email'))
<span class="help-block">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
</div>

<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
Resend email
</button>
<a class="btn btn-link" href="{{ route('login') }}">
Login
</a>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection

0 comments on commit ed9e9a5

Please sign in to comment.