按照启用新的内置电子邮件验证的安装后,一切正常(注册后发送电子邮件并单击激活启用帐户)。
但是,我遇到了用户必须登录才能进行验证过程的情况。意思是,如果用户在使用验证链接之前没有登录,他将被重定向到登录页面,然后显示该/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');
});
Run Code Online (Sandbox Code Playgroud)
通过跟踪验证过程,我能够发现该过程是VerificationController通过下面显示的中间件强制登录构造函数。
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
Run Code Online (Sandbox Code Playgroud)
通过注释第一行或添加->except('verify'),登录页面不会显示,但在 TraitsVerifiesEmails方法验证中抛出错误,如下所示,因为用户显然没有登录它($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);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法让它在没有事先登录的情况下工作,或者这是 5.7 中实现验证过程的方式?……或者我做错了什么?