繁体   English   中英

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

[英]Laravel email verification - Forced to be logged in

按照启用新的内置电子邮件验证的安装后,一切正常(注册后发送电子邮件并单击激活启用帐户)。
但是,我遇到了用户必须登录才能进行验证过程的情况。 意思是,如果用户在使用验证链接之前没有登录,他将被重定向到登录页面,然后显示/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');
    }

通过注释第一行或添加->except('verify') ,不会显示登录页面,但在 Traits VerifiesEmails方法 Verify 会抛出一个错误,如下所示,因为用户显然没有登录它( $request->user()为空)。

public function verify(Request $request)
    {
        if ($request->route('id') == $request->user()->getKey() &&
            $request->user()->markEmailAsVerified()) {
            event(new Verified($request->user()));
        }

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

我的问题是,有没有办法让它在没有事先登录的情况下工作,或者这就是 5.7 中验证过程的实现方式? ……或者我做错了什么?

有没有办法让它在没有事先登录的情况下工作,或者这是验证过程在 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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM