Zend Framework 2 电子邮件令牌验证
Zend Framework 2 email token verification
我正在尝试创建一个系统(在 Zend Framework 2 中)通过发送带有 link 和令牌(例如:http://example.com/user/autenticate/verify/abG12Fdss67j3kgfdds4jdpa74FiP9)的电子邮件来验证用户注册的电子邮件,所以如果在数据库中找到令牌预注册帐户移动到已验证状态。
我在 module.config.php 中使用这样的路线:
'verify' => array(
'type' => 'Segment',
'options' => array(
'route' => '/user/autenticate/verify/:token',
'defaults' => array(
'__NAMESPACE__' => 'User\Controller',
'controller' => 'Autenticate',
'action' => 'verify',
),
'constraints' => array(
'token' => '[a-zA-Z0-9]{30}'
),
),
),
然后在AutenticateController.php下面的操作方法:
public function verifyAction()
{
sleep(3); // Delay against brute attack (is it useful?)
$token = $this->params()->fromRoute('token');
$registerverification = new RegisterVerification();
try {
$registerverification = $this->getRegisterVerificationTable()->getRegisterVerification($token);
// If arrives here (no exception) means that the token was in the database
$aux = $this->getRegisterVerificationTable()->deleteRegisterVerification($token);
$user = new User();
$user = $this->getUserTable()->getUser((int)$registerverification->id);
$user->verified = date("Y-m-d H:i:s");
$this->getUserTable()->saveUser($user);
$this->flashMessenger()->addMessage("Now your account is active");
} catch (\Exception $e) { // Could not find row: $token
$this->flashMessenger()->addMessage($e->getMessage());
}
return array();
}
还有一个 verify.phtml 这样的:
<?php
echo $this->flashMessenger()->render();
?>
这是有效的,但不是在第一次尝试时,而是在刷新 URL (http://example.com/user/autenticate/verify/abG12Fdss67j3kgfdds4jdpa74FiP9) 之后。
任何人都可以帮助我在第一次调用 URL 时执行 AutenticateController.php 的方法 verifyAction() 吗?
Flash Messenger 设计用于在 下一个 请求中显示消息,因此您可能希望在添加成功消息后重定向到另一个 URL。这可能是唯一的问题(否则请让我们知道第一次请求时会发生什么)。
我正在尝试创建一个系统(在 Zend Framework 2 中)通过发送带有 link 和令牌(例如:http://example.com/user/autenticate/verify/abG12Fdss67j3kgfdds4jdpa74FiP9)的电子邮件来验证用户注册的电子邮件,所以如果在数据库中找到令牌预注册帐户移动到已验证状态。
我在 module.config.php 中使用这样的路线:
'verify' => array(
'type' => 'Segment',
'options' => array(
'route' => '/user/autenticate/verify/:token',
'defaults' => array(
'__NAMESPACE__' => 'User\Controller',
'controller' => 'Autenticate',
'action' => 'verify',
),
'constraints' => array(
'token' => '[a-zA-Z0-9]{30}'
),
),
),
然后在AutenticateController.php下面的操作方法:
public function verifyAction()
{
sleep(3); // Delay against brute attack (is it useful?)
$token = $this->params()->fromRoute('token');
$registerverification = new RegisterVerification();
try {
$registerverification = $this->getRegisterVerificationTable()->getRegisterVerification($token);
// If arrives here (no exception) means that the token was in the database
$aux = $this->getRegisterVerificationTable()->deleteRegisterVerification($token);
$user = new User();
$user = $this->getUserTable()->getUser((int)$registerverification->id);
$user->verified = date("Y-m-d H:i:s");
$this->getUserTable()->saveUser($user);
$this->flashMessenger()->addMessage("Now your account is active");
} catch (\Exception $e) { // Could not find row: $token
$this->flashMessenger()->addMessage($e->getMessage());
}
return array();
}
还有一个 verify.phtml 这样的:
<?php
echo $this->flashMessenger()->render();
?>
这是有效的,但不是在第一次尝试时,而是在刷新 URL (http://example.com/user/autenticate/verify/abG12Fdss67j3kgfdds4jdpa74FiP9) 之后。
任何人都可以帮助我在第一次调用 URL 时执行 AutenticateController.php 的方法 verifyAction() 吗?
Flash Messenger 设计用于在 下一个 请求中显示消息,因此您可能希望在添加成功消息后重定向到另一个 URL。这可能是唯一的问题(否则请让我们知道第一次请求时会发生什么)。