最近开始用laravel 7写一个e-com网站,我的问题是如何添加邮箱验证
https://laravel.com/docs/7.x/verification : 已读
Auth::routes(['register'=>false]);
Route::get('user/login','FrontendController@login')->name('login.form');
Route::post('user/login','FrontendController@loginSubmit')->name('login.submit');
Route::get('user/logout','FrontendController@logout')->name('user.logout');
Route::get('user/register','FrontendController@register')->name('register.form');
Route::post('user/register','FrontendController@registerSubmit')->name('register.submit');
// Reset password
Route::post('password-reset', 'FrontendController@showResetForm')->name('password.reset');
// Socialite
Route::get('login/{provider}/', 'Auth\LoginController@redirect')->name('login.redirect');
Route::get('login/{provider}/callback/', 'Auth\LoginController@Callback')->name('login.callback');
Route::get('/','FrontendController@home')->name('home');
// Frontend Routes
Route::get('/home', 'FrontendController@index');
Route::get('/about-us','FrontendController@aboutUs')->name('about-us');
Route::get('/contact','FrontendController@contact')->name('contact');
Route::post('/contact/message','MessageController@store')->name('contact.store');
Route::get('product-detail/{slug}','FrontendController@productDetail')->name('product-detail');
Route::post('/product/search','FrontendController@productSearch')->name('product.search');
Route::get('/product-cat/{slug}','FrontendController@productCat')->name('product-cat');
Route::get('/product-sub-cat/{slug}/{sub_slug}','FrontendController@productSubCat')->name('product-sub-cat');
Route::get('/product-brand/{slug}','FrontendController@productBrand')->name('product-brand');
用户表
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique()->nullable();
$table->timestamp('email_verified_at')->nullable();
$table->string('password')->nullable();
$table->string('photo')->nullable();
$table->enum('role',['admin','user'])->default('user');
$table->string('provider')->nullable();
$table->string('provider_id')->nullable();
$table->enum('status',['active','inactive'])->default('active');
$table->rememberToken()->nullable();
$table->timestamps();
});
事件服务提供者
@var array
*/
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],
];
App\User 实现 Illuminate\Contracts\Auth\MustVerifyEmail
<?php
namespace App;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class User extends Authenticatable implements MustVerifyEmail
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password','role','photo','status','provider','provider_id',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function orders(){
return $this->hasMany('App\Models\Order');
}
}
这是我的电子邮件验证控制器
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* 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');
}
感谢您的帮助
答案 0 :(得分:0)
您可以在您的数据库中创建一个名为 verification_token
的字段,并在注册期间生成一个唯一的字符串,并将代码以链接格式发送到用户的电子邮件中,例如,
http://localhost:8000/verify-email-address?token=123456&email=user@example.com
如果电子邮件与数据库中的令牌匹配,则用户 verification_token
在点击 URL 后将变为空白,用户可以登录