【问题标题】:Mail confirmation - invalid token邮件确认 - 无效令牌
【发布时间】:2016-06-02 19:25:34
【问题描述】:

我从昨天开始处理令牌确认问题。 所以网站应该给我发一封电子邮件,里面有 ID 和 Token。 但是当我在 URL 时,它说无效的令牌,我不明白为什么

这是一些代码

确认.php

    <?php
require '../class/Bootstrap.php';
$db = App::getDatabase();
$auth = new Auth($db);

if($auth->confirm($_GET['id'],$_GET['token'], Session::getInstance())){

    Session::getInstance()->setFlash('success',"OK, valid account");
    App::redirect('../account.php');
}
    else{
        Session::getInstance()->setFlash('danger',"Invalid token");
        App::redirect('login.php');
    }

会话类

class Session{

static $instance;

      static function getInstance(){
    if(!self::$instance){
        self::$instance = new Session();
    }
    return self::$instance;
} 

      public function write($key, $value){
    $_SESSION[$key] = $value;
}

      public function read($key){
    return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
}

      public function delete($key){
    unset($_SESSION[$key]);
}

认证类

  public function confirm($user_id,$token, $session){

    $user = $this->db->query('SELECT * FROM users WHERE id = ?', [$user_id]);
        if($user && $user->confirmation_token == $token ){
            $this->db->query('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id = ?', [user_id]);
            $session->write('auth',$user);
            return true;
        }
        return false;

    }

有人可以告诉我哪里错了吗?谢谢

【问题讨论】:

  • 你在使用 PDO 吗?

标签: php email token confirmation


【解决方案1】:

PDO::query 不将数据作为第二个参数。所以它不能用于准备好的语句。

您想将PDO::preparePDOStatement::execute 一起使用:

$sth = $this->db->prepare('SELECT * FROM users WHERE id = ?');
$sth->execute(array($user_id));

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 2018-03-19
    • 2015-12-13
    • 1970-01-01
    • 2015-01-06
    • 2015-02-16
    • 2016-12-11
    • 1970-01-01
    • 2016-06-07
    相关资源
    最近更新 更多