如何解决Laravel 8:注册后如何验证用户的电子邮件地址而无需登录信息?
我使用Jetstream设置了Laravel 8安装并实现了自定义用户注册,在成功创建数据库记录event(new Registered($user));
之后,将触发一个事件。
初始注册过程不需要密码,因为将来只有选定的一组用户才能登录到仪表板。
注册后,用户会收到带有验证链接的电子邮件,但是他仍然需要登录才能验证。
我尝试删除routes/web.php
中的身份验证中间件,但是尝试验证用户的电子邮件地址后收到错误消息。
Route::get('/email/verify/{id}/{hash}',function (EmailVerificationRequest $request) {
$request->fulfill();
return view('home');
})->middleware(['auth','signed'])->name('verification.verify');
是否可以在没有登录信息的情况下验证用户的电子邮件地址?
解决方法
有可能。
您可以直接在Jetstream软件包中修改文件,但是我将介绍添加新文件并保持原始软件包不变的方法。
添加新的Controller App \ Http \ Controllers \ VerifyEmailController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Auth\Events\Verified;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
use App\Models\User;
class VerifyEmailController extends Controller
{
public function __invoke(Request $request): RedirectResponse
{
$user = User::find($request->route('id')); //takes user ID from verification link. Even if somebody would hijack the URL,signature will be fail the request
if ($user->hasVerifiedEmail()) {
return redirect()->intended(config('fortify.home') . '?verified=1');
}
if ($user->markEmailAsVerified()) {
event(new Verified($user));
}
$message = __('Your email has been verified.');
return redirect('login')->with('status',$message); //if user is already logged in it will redirect to the dashboard page
}
}
在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');
最后清除路由缓存:
php artisan route:cache
,
打开 config/fortify.php 文件并取消注释 Features::emailVerification(),
行。
'features' => [
Features::registration(),Features::resetPasswords(),// Features::emailVerification(),Features::updateProfileInformation(),Features::updatePasswords(),Features::twoFactorAuthentication([
'confirmPassword' => true,]),],
接下来转到用户模式并实现MustVerifyEmail接口。
class User extends Authenticatable implements MustVerifyEmail{
use Notifiable;
}
注意:您应该了解Mail in Laravel
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。