当前位置: 首页 > 知识库问答 >
问题:

Laravel 8:注册后如何验证用户的电子邮件地址,而不需要登录信息?

吴浩皛
2023-03-14

我使用Jetstream设置了Laravel 8安装并实现了自定义用户注册,其中在成功创建数据库记录事件(新注册($user))后触发事件;

初始注册过程还不需要密码,因为将来只有选定的一组用户才能登录到仪表板。

注册后,用户会收到一封带有验证链接的电子邮件,但他仍然需要登录才能获得验证。

我试图删除路由/web中的auth中间件。然而,在尝试验证用户的电子邮件地址后,我收到了一条错误消息。

Route::get('/email/verify/{id}/{hash}', function (EmailVerificationRequest $request) {
  $request->fulfill();
  return view('home');
})->middleware(['auth','signed'])->name('verification.verify');

是否可以在没有登录信息的情况下验证用户的电子邮件地址?

共有2个答案

那博瀚
2023-03-14

打开配置/加固。php文件并取消注释Features::emailVerification(),行。

'features' => [
    Features::registration(),
    Features::resetPasswords(),
    // Features::emailVerification(),
    Features::updateProfileInformation(),
    Features::updatePasswords(),
    Features::twoFactorAuthentication([
        'confirmPassword' => true,
    ]),
],

接下来转到User模式并实现MustVerifyEmail界面。

class User extends Authenticatable implements MustVerifyEmail{
   use Notifiable;

}

注意:您应该了解Laravel中的邮件

解念
2023-03-14

这是可能的。

你们可以直接修改Jetstream软件包中的文件,但我将介绍添加新文件和保持原始软件包不变的方法。

添加新的控制器应用程序\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
 类似资料:
  • 我正在使用Vue,这是我的注册方法,它所做的是注册任何电子邮件ID... 我已在 Firebase 控制台中配置了电子邮件验证。现在,我希望注册方法发送验证邮件,并且只有在用户已验证电子邮件时才注册用户。 我应该如何修改现有代码?我很困惑。

  • 问题内容: 有谁知道如何在Swift中验证电子邮件地址?我发现此代码: 但我无法将其翻译为Swift。 问题答案: 我会用: 对于低于3.0的Swift版本: 对于低于1.2的Swift版本:

  • 问题内容: 是否有正则表达式来验证JavaScript中的电子邮件地址? 问题答案: 使用正则表达式可能是最好的方法。您可以在此处看到很多测试(taken from chromium) 这是接受unicode的常规表达式的示例: 但是请记住,不应该只依赖JavaScript验证。可以轻松禁用JavaScript。这也应该在服务器端进行验证。 这是上述操作的一个示例:

  • 我创建了一个与我的 Flutter 应用配合使用的登录和注册屏幕,使用 Firebase 作为后端身份验证服务。我能够在登录,注册和重置密码屏幕之间切换。 问题 目前,注册屏幕接受输入的任何电子邮件地址,无论它是否真实。例如,如果我键入 gvevg@gverwbgw.com,它将允许用户注册。当涉及到虚假帐户和垃圾邮件等时,这显然是一个问题。 目标 我基本上想能够编辑我的代码,自动生成一个电子邮件

  • 注意:我已经看到了这个问题,但创建一个完整的登录页面来验证用户似乎有点过分。 我使用带有电子邮件和密码的 向我的 react-native 应用程序添加了登录功能。到目前为止,这效果很好,我这样做没有任何问题。 然后,我继续向一个新用户发送验证电子邮件,并只允许他/她在电子邮件验证后使用该应用程序。同样,这里没有问题。 下一步是在验证电子邮件后立即登录用户。这就是我卡住的地方,因为 事件处理程序在

  • 每当我在Firebase中使用电子邮件/密码身份验证提供程序时,提供程序都会在成功注册时发送一个无记名令牌,即使是。是否有一种开箱即用的方法将电子邮件/密码身份验证提供程序配置为在用户验证其电子邮件地址之前不发送无记名令牌(并返回403错误)? 请注意,我知道如何创建用户、登录用户、发送验证电子邮件等。。。使用firebase v9。x通过firebase/auth中的方法创建用户(使用Email