我通常使用的是最新版本的Laravel,并尝试通过电子邮件验证实施身份验证。但是,我在用户注册后收到的电子邮件中的链接导致403错误页面。链接似乎正确。
我正在与Homestead和Vagrant一起在'localhost'工作。 注册用户正在工作,在功能结束时得到了创建的用户,并且数据库已填充完毕。
我不得不编辑RegisterController创建方法,因为没有发送邮件。
首先,当单击链接时,我只有空白页。经过一番阅读后,我了解到该用户需要先经过身份验证才能被验证,并且注册用户后我的RegisterController尚未对他进行身份验证。 创建用户后,我添加了一些代码来对用户进行身份验证。 现在,当单击链接时,出现403错误页面。
注意:我的表不是默认表,其中包含email_verified_at字段。
这是我在RegisterController内的create方法:
protected function create(Request $request)
{
//Create user in database
$user = User::create([
'Username' => $request['pc2f448466c4bad46f466f025e6cf88f9'],
'email' => $request['p07d5d4eb055cc69dbba790bb9d39a3dc'],
'Password' => md5($request['pb80ee032d334d60f5bc555af500fcf87']),
'SecretQuestion' => $request['secret_question'],
'SecretAnswer' => $request['secret_answer'],
'Nickname' => $request['p9c969905e63e2824c45b8712e6d29585']
]);
$user->sendEmailVerificationNotification();
Auth::login($user);
}
这是我的VerificationController:
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
protected function redirectTo()
{
return route('home');
}
}
我尝试在TrustProxies中间件中设置protected $proxies = '*';
。
.env文件中的我的应用程序常量:
APP_NAME=Furya
APP_ENV=local
APP_KEY=base64:xxxxxxxxxxxxxxxxxxxx
APP_DEBUG=true
APP_URL=http://localhost
在我的网络路由文件中,我的第一个路由是:
Auth::routes(['verify' => true]);
Route::get('/', function () {
return view('main/home');
})->name('home');
使用php artisan route:list
时,我看到了Auth::routes(['verify' => true]);
路由正确的中间件。
在我的用户表(MySQL)中,字段email_verified_at
具有日期时间类型。
在应用程序配置中,我的应用程序URL设置如下:
'url' => env('APP_URL', 'http://sunshine.local'),
'asset_url' => env('ASSET_URL', null),
我实际收到的链接如下:http://sunshine.local/email/verify/177?expires=1567179404&signature=0a81e1370934c95282975c9fb7cfa379fd1945814e45894ffec5728e04ad4f7a
我不知道发生了什么,可惜直到现在互联网上都找不到解决方案。
谢谢您的帮助。
答案 0 :(得分:0)
从web.php
文件中发出HTTP Web请求时,只能通过命名路由'/'
访问应用程序根URL route('home')
,该路由将返回自定义视图。
因此,像这样在redirectTo()
中包含一个VerificationController.php
方法
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
// other imports
class VerificationController extends Controller
{
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
protected function redirectTo()
{
return route('home');
}
}
现在,您应该在验证电子邮件后将您重定向到有效路由。
答案 1 :(得分:0)
Auth::routes(['verify' => true]);`
我注意到您的路线上有一个回声。在验证路线半冒号之后。尝试删除它,看看会发生什么
答案 2 :(得分:0)
这是由于有关users表中字段名称的问题。
参见我的其他帖子以获取答案:Laravel 5.8 : Remember me token not being saved in database
答案 3 :(得分:0)
有同样的问题; 在您的.env中签入您的
APP_URL=http://...
是正确的并且匹配。