Skip to content

Commit 2baa3b8

Browse files
committed
email verified for new auth is fixed
1 parent ba19135 commit 2baa3b8

File tree

9 files changed

+121
-33
lines changed

9 files changed

+121
-33
lines changed

src/Console/Commands/MakeMultiAuthCommand.php

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,16 +51,16 @@ public function handle()
5151
return;
5252
}
5353
$this->addGuard()
54-
->publishControllers()
55-
->publishRoutes()
56-
->registerRoutes()
57-
->loadViews()
58-
->publishFactory()
59-
->publishMigration()
60-
->publishModel()
61-
->publishMiddleware()
62-
->registerMiddleware()
63-
->publishNotification();
54+
->publishControllers()
55+
->publishRoutes()
56+
->registerRoutes()
57+
->loadViews()
58+
->publishFactory()
59+
->publishMigration()
60+
->publishModel()
61+
->publishMiddleware()
62+
->registerMiddleware()
63+
->publishNotification();
6464
}
6565

6666
protected function addGuard()
@@ -210,6 +210,7 @@ protected function loadViews()
210210
'layouts/app.blade',
211211
'auth/login.blade',
212212
'auth/register.blade',
213+
'auth/verify.blade',
213214
'auth/passwords/email.blade',
214215
'auth/passwords/reset.blade',
215216
];
@@ -285,6 +286,15 @@ protected function publishMiddleware()
285286
$middleware = strtr($stub, $this->parseName());
286287

287288
file_put_contents($middleware_path . '/RedirectIfNot' . $this->parseName()['{{singularClass}}'] . '.php', $middleware);
289+
290+
// ...
291+
292+
$stub = file_get_contents($this->stub_path . '/Middleware/EnsureEmailIsVerified.stub');
293+
294+
$middleware = strtr($stub, $this->parseName());
295+
296+
file_put_contents($middleware_path . '/EnsureEmailIsVerifiedOf' . $this->parseName()['{{singularClass}}'] . '.php', $middleware);
297+
288298
$this->info("Step 9. Middlewares related to {$this->name} is added App\Http\Middleware directory \n");
289299

290300
return $this;

src/Console/Commands/RollbackMultiAuthCommand.php

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,16 @@ protected function rollback()
5656
return;
5757
}
5858
$this->unPublishGuard()
59-
->rollbackControllers()
60-
->rollbackRoutes()
61-
->unRegisterRoutes()
62-
->rollbackViews()
63-
->removeFactory()
64-
->removeMigration()
65-
->removeModel()
66-
->removeMiddleware()
67-
->unRegisterMiddleware()
68-
->removeNotification();
59+
->rollbackControllers()
60+
->rollbackRoutes()
61+
->unRegisterRoutes()
62+
->rollbackViews()
63+
->removeFactory()
64+
->removeMigration()
65+
->removeModel()
66+
->removeMiddleware()
67+
->unRegisterMiddleware()
68+
->removeNotification();
6969
}
7070

7171
protected function unPublishGuard()
@@ -191,6 +191,7 @@ protected function removeMiddleware()
191191
$path = app_path('Http/Middleware');
192192
unlink("{$path}/RedirectIf{$guard}.php");
193193
unlink("{$path}/RedirectIfNot{$guard}.php");
194+
unlink("{$path}/EnsureEmailIsVerifiedOf{$guard}.php");
194195
$this->error("Step 9. Middlewares related to {$this->name} is removed from App\Http\Middleware directory \n");
195196

196197
return $this;
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace Bitfumes\Multiauth\Http\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Contracts\Auth\MustVerifyEmail;
7+
use Illuminate\Support\Facades\Redirect;
8+
9+
class EnsureStudentEmailIsVerified
10+
{
11+
/**
12+
* Handle an incoming request.
13+
*
14+
* @param \Illuminate\Http\Request $request
15+
* @param \Closure $next
16+
* @param string|null $redirectToRoute
17+
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
18+
*/
19+
public function handle($request, Closure $next, $redirectToRoute = null)
20+
{
21+
if (
22+
!$request->user('student') ||
23+
($request->user('student') instanceof MustVerifyEmail &&
24+
!$request->user('student')->hasVerifiedEmail())
25+
) {
26+
return $request->expectsJson()
27+
? abort(403, 'Your email address is not verified.')
28+
: Redirect::route($redirectToRoute ?: 'student.verification.notice');
29+
}
30+
31+
return $next($request);
32+
}
33+
}

stubs/Controllers/Auth/VerificationController.stub

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ namespace {{namespace}}\Http\Controllers\{{singularClass}}\Auth;
44

55
use {{namespace}}\Http\Controllers\Controller;
66
use Illuminate\Foundation\Auth\VerifiesEmails;
7+
use Illuminate\Http\Request;
78

89
class VerificationController extends Controller
910
{
@@ -34,8 +35,16 @@ class VerificationController extends Controller
3435
*/
3536
public function __construct()
3637
{
38+
$this->middleware('{{singularSnake}}.auth');
3739
$this->middleware('auth:{{singularSnake}}');
3840
$this->middleware('signed')->only('verify');
3941
$this->middleware('throttle:6,1')->only('verify', 'resend');
4042
}
43+
44+
public function show(Request $request)
45+
{
46+
return $request->user()->hasVerifiedEmail()
47+
? redirect($this->redirectPath())
48+
: view('{{singularSnake}}.auth.verify');
49+
}
4150
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?php
2+
3+
namespace {{namespace}}\Http\Middleware;
4+
5+
use Closure;
6+
use Illuminate\Contracts\Auth\MustVerifyEmail;
7+
use Illuminate\Support\Facades\Redirect;
8+
9+
class EnsureEmailIsVerifiedOf{{singularClass}}
10+
{
11+
/**
12+
* Handle an incoming request.
13+
*
14+
* @param \Illuminate\Http\Request $request
15+
* @param \Closure $next
16+
* @param string|null $redirectToRoute
17+
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
18+
*/
19+
public function handle($request, Closure $next, $redirectToRoute = null)
20+
{
21+
if (
22+
!$request->user('{{singularSlug}}') ||
23+
($request->user('{{singularSlug}}') instanceof MustVerifyEmail &&
24+
!$request->user('{{singularSlug}}')->hasVerifiedEmail())
25+
) {
26+
return $request->expectsJson()
27+
? abort(403, 'Your email address is not verified.')
28+
: Redirect::route($redirectToRoute ?: '{{singularSlug}}.verification.notice');
29+
}
30+
31+
return $next($request);
32+
}
33+
}

stubs/Middleware/Kernel.stub

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11

22
'{{singularSnake}}.auth' => \App\Http\Middleware\RedirectIfNot{{singularClass}}::class,
3-
'{{singularSnake}}.guest' => \App\Http\Middleware\RedirectIf{{singularClass}}::class,
3+
'{{singularSnake}}.guest' => \App\Http\Middleware\RedirectIf{{singularClass}}::class,
4+
'{{singularSnake}}.verified' => \App\Http\Middleware\EnsureEmailIsVerifiedOf{{singularClass}}::class,

stubs/Notifications/VerifyEmail.stub

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,17 @@ class {{singularClass}}VerifyEmail extends Notification
3737
*/
3838
public function toMail($notifiable)
3939
{
40+
$verificationUrl = $this->verificationUrl($notifiable);
41+
4042
if (static::$toMailCallback) {
41-
return call_user_func(static::$toMailCallback, $notifiable);
43+
return call_user_func(static::$toMailCallback, $notifiable, $verificationUrl);
4244
}
4345

4446
return (new MailMessage)
45-
->subject(Lang::getFromJson('Verify Email Address'))
46-
->line(Lang::getFromJson('Please click the button below to verify your email address.'))
47-
->action(
48-
Lang::getFromJson('Verify Email Address'),
49-
$this->verificationUrl($notifiable)
50-
)
51-
->line(Lang::getFromJson('If you did not create an account, no further action is required.'));
47+
->subject(Lang::get('Verify Email Address'))
48+
->line(Lang::get('Please click the button below to verify your email address.'))
49+
->action(Lang::get('Verify Email Address'), $verificationUrl)
50+
->line(Lang::get('If you did not create an account, no further action is required.'));
5251
}
5352

5453
/**
@@ -62,7 +61,10 @@ class {{singularClass}}VerifyEmail extends Notification
6261
return URL::temporarySignedRoute(
6362
'{{singularSnake}}.verification.verify',
6463
Carbon::now()->addMinutes(Config::get('auth.verification.expire', 60)),
65-
['id' => $notifiable->getKey()]
64+
[
65+
'id' => $notifiable->getKey(),
66+
'hash' => sha1($notifiable->getEmailForVerification()),
67+
]
6668
);
6769
}
6870

stubs/routes/routes.stub

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,5 @@ Route::group(['namespace' => '{{singularClass}}'], function() {
2121
// Must verify email
2222
Route::get('email/resend','Auth\VerificationController@resend')->name('{{singularSlug}}.verification.resend');
2323
Route::get('email/verify','Auth\VerificationController@show')->name('{{singularSlug}}.verification.notice');
24-
Route::get('email/verify/{id}','Auth\VerificationController@verify')->name('{{singularSlug}}.verification.verify');
25-
24+
Route::get('email/verify/{id}/{hash}','Auth\VerificationController@verify')->name('{{singularSlug}}.verification.verify');
2625
});

stubs/views/auth/verify.blade.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
@endif
1616

1717
{{ __('Before proceeding, please check your email for a verification link.') }}
18-
{{ __('If you did not receive the email') }}, <a href="{{ route('verification.resend') }}">{{ __('click here to request another') }}</a>.
18+
{{ __('If you did not receive the email') }}, <a href="{{ route('{{singularSlug}}.verification.resend') }}">{{ __('click here to request another') }}</a>.
1919
</div>
2020
</div>
2121
</div>

0 commit comments

Comments
 (0)