我使用 Jetstream 设置了 Laravel 8 安装并实现了自定义用户注册,在成功创建数据库记录后会触发一个事件event(new Registered($user));
.
初始注册过程应该不需要密码,因为将来只有选定的一组用户能够登录仪表板。
注册后,用户会收到一封包含验证链接的电子邮件,但他仍然需要登录才能进行验证。
我尝试删除 auth 中间件routes/web.php
,但是在尝试验证用户的电子邮件地址后我收到一条错误消息。
Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
$request->fulfill();
return view('home');
})->middleware(['auth','signed'])->name('verification.verify');
是否可以在没有登录信息的情况下验证用户的电子邮件地址?
有可能的。
您可以直接在 Jetstream 包中修改文件,但是我将介绍添加新文件并保持原始包不变的方法。
添加新的控制器 App\Http\Controllers\VerifyEmailController.php
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Auth\Events\Verified;
use Illuminate\Http\Request;
use Laravel\Fortify\Contracts\VerifyEmailResponse;
class VerifyEmailController extends Controller
{
public function __invoke(Request $request)
{
$user = User::findOrFail($request->route('id'));
if (! hash_equals(sha1($user->getEmailForVerification()), (string) $request->route('hash'))) {
throw new AuthorizationException;
}
if ($user->hasVerifiedEmail()) {
return app(VerifyEmailResponse::class);
}
if ($user->markEmailAsVerified()) {
event(new Verified($user));
}
return app(VerifyEmailResponse::class);
}
}
在 web.php 中添加一条新路由,无需auth
中间件:
use App\Http\Controllers\VerifyEmailController;
Route::get('/email/verify/{id}/{hash}', [VerifyEmailController::class, '__invoke'])
->middleware(['signed', 'throttle:6,1'])
->name('verification.verify');
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)