Laravel 5.7.9电子邮件验证-强制登录

时间:2018-10-23 12:41:35

标签: php laravel

在安装了启用新的内置电子邮件验证的安装之后,一切正常(在注册后发送电子邮件并单击激活以启用该帐户)。
但是,我面临这样的情况,用户必须登录才能进行验证过程。这意味着,如果用户在使用验证链接之前未登录,则将其重定向到登录页面,然后显示handle_call页面。

我正在与社区联系,看看这是否是故意的,错误或我做错了什么?有人在相同的情况下跑步吗?

我正在建立的网站可以访问大多数页面,但仅限于某些页面(目前为用户门户)。我将/resources/view/auth/verify.blade.php设置如下:

routes/web.php

通过跟踪验证过程,我能够发现该过程是通过以下所示的中间件强制在// Authentication Auth::routes(['verify' => true]); Route::group(['middleware' => ['auth', 'verified'], 'as' => 'portal.', 'prefix' => '/portal'], function () { Route::get('/', 'PortalController@index'); Route::get('/profile', 'PortalController@index')->name('profile'); Route::get('/orders', 'PortalController@index')->name('orders'); }); 构造函数中进行登录。

VerificationController

通过注释第一行或添加public function __construct() { $this->middleware('auth'); $this->middleware('signed')->only('verify'); $this->middleware('throttle:6,1')->only('verify', 'resend'); } ,不会显示登录页面,但在Traits ->except('verify')方法上会引发错误,如下所示进行验证,因为用户显然未登录(VerifiesEmails为空)。

$request->user()

我的问题是,有没有一种方法可以使它在不预先登录的情况下正常工作,或者这是在5.7中实施验证过程的方式? ...还是我做错了什么?

1 个答案:

答案 0 :(得分:3)

  

有没有一种方法可以使它在不预先登录的情况下正常工作,或者   这是5.7中实施验证过程的方式吗? ... 要么   我在做什么错了?

这是在Laravel 5.7中实施验证过程的方式。 Laravel使用签名的URL进行验证。该URL是使用id参数(id为用户ID)生成的,当用户单击验证链接时,将进行3次检查:

  1. 签名有效吗? (signed中间件)
  2. 签名中的用户ID是什么?那就是最终将被验证的ID
  3. 当前登录的用户是否具有相同的ID?

您始终可以通过覆盖VerificationController中的verify方法来删除第三项检查,如下所示:

public function verify(Request $request)
{

    $userId = $request->route('id');
    $user = App\User::findOrFail($userId);

    if ($user->markEmailAsVerified()) {
        event(new Verified($user));
    }

    return redirect($this->redirectPath())->with('verified', true);
}