基本上,我需要一个电子邮件验证系统。为了清楚起见,我将只发布需要影响的代码段。用户注册时,将生成一个随机的40字符串令牌并将其发送给他们,该代码将被附加到路由中,如下所示:
Route::get('/user/verify/{token}', 'RegisterController@verifyUser');
因此,当用户点击该链接时,路由应该调用此链接:
RegisterController:
public function verifyUser($token){
$verifyUser = new VerifyUser();
$verifyUser->token = $token;
$verifyUser->getByToken();
$user = new User();
$user->id = $verifyUser->user_id;
$user->get();
if(isset($verifyUser)){
if(!$user->verified){
$user->updateVerifiedStatus();
$status = "Uspešno ste verifikovali e-mail adresu. Sada se možete ulogovati";
} else{
$status = "Već ste se verifikovali.";
}
} else{
return redirect('/')->with('error', "Vaš e-mail ne postoji");
}
return redirect('/')->with('status', $status);
}
verify_user是具有用户ID和令牌字段的表,如果用户未注册,则表中将没有该用户的实例,因此-> if(isset($ verifyUser)), 同样,用户表有一个“已验证”字段,该字段是一个布尔值,存储了正确和错误的值,因此-> if(!$ user-> verified)。
这是上述控制器中使用的模型
VerifyUser :
class VerifyUser
{
public $user_id;
public $token;
public $created_at;
public $updated_at;
public function getByToken()
{
$result =
DB::table('verify_users')
->select('*')
->where('token', $this->token)
->first();
return $result;
}
public function create()
{
$result =
DB::table('verify_users')
->insert([
'user_id' => $this->user_id,
'token' => $this->token,
]);
return $result;
}
}
用户
class User
{
public function get()
{
$result =
DB::table('users')
->select('*')
->where('id', $this->id)
->first();
return $result;
}
public function updateVerifiedStatus()
{
$data = [
'verified' => true,
];
$result =
DB::table('users')
->where('id', $this->id)
->update($data);
return $result;
}
}
因此,当我单击链接时,一切都通过了,我得到了成功状态,这告诉我$ user-> updateVerifiedStatus()函数已成功返回。但是,当我检查表时,该字段仍为false,并且不会更新。有什么想法吗?