【发布时间】:2019-12-16 06:56:48
【问题描述】:
如何使用 Vue Router 在 Vue SPA 上实现 Laravel 的电子邮件验证?
到目前为止,我已尝试通过更改 VerificationController 的验证和重新发送方法来处理电子邮件验证。然后,我创建了一个新通知并添加了用于验证的 API 路由。
当生成验证链接并发送到用户的电子邮件时,验证 url 类似于:
当链接被点击时,它会打开一个页面,但它在后端什么也不做,因为@verify api 路由没有被命中。
有什么建议吗?
验证控制器.php
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\VerifiesEmails;
use Illuminate\Validation\ValidationException;
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 = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:api');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:600,1')->only('verify', 'resend');
}
/**
* Show the email verification notice.
*
*/
public function show()
{
//
}
/**
* Mark the authenticated user's email address as verified.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function verify(Request $request)
{
$userID = $request[‘id’];
$user = User::findOrFail($userID);
$user->email_verified_at = date("Y-m-d g:i:s");
$user->save();
return response()->json('Email verified!');
}
/**
* Resend the email verification notification.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function resend(Request $request)
{
if ($request->user()->hasVerifiedEmail()) {
return response()->json('The email is already verified.', 422);
}
$request->user()->sendEmailVerificationNotification();
return response()->json('We have e-mailed your verification link!');
}
}
验证电子邮件.php
<?php
namespace App\Notifications;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\URL;
use Carbon\Carbon;
use Illuminate\Auth\Notifications\VerifyEmail as VerifyEmailBase;
class VerifyEmail extends VerifyEmailBase
{
/**
* Get the verification URL for the given notifiable.
*
* @param mixed $notifiable
* @return string
*/
protected function verificationUrl($notifiable)
{
return URL::temporarySignedRoute(
‘verification.verify’, Carbon::now()->addMinutes(60), [‘id’ => $notifiable->getKey()]
);
}
}
API.php
Route::get('email/verify/{id}', 'Auth\VerificationController@verify')->name('verification.verify');
Route::get('email/resend', 'Auth\VerificationController@resend')->name('verification.resend');
【问题讨论】:
-
您可能错过了将
implements MustVerifyEmail添加到那个。如果缺少此接口实现,邮件检查方法将不会做任何事情。你能发布或检查你的用户模型吗? -
为什么你认为它没有被击中?它完全匹配。你的 API 路径上有前缀吗?
标签: laravel email vue.js single-page-application email-verification