X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=classes%2FLogin_token.php;h=51dc61262eb96592e1f9c665b3caae8a1b2a0e9e;hb=43cc24a0ccd89081effa26361e861ba26a9cd842;hp=c172b30abc8b5f0e71b0fbb23a8342f7e2b3cb20;hpb=78fc9483d4d1fde4561905edf6594b86c4dc374e;p=quix0rs-gnu-social.git diff --git a/classes/Login_token.php b/classes/Login_token.php index c172b30abc..51dc61262e 100644 --- a/classes/Login_token.php +++ b/classes/Login_token.php @@ -39,4 +39,44 @@ class Login_token extends Memcached_DataObject /* the code above is auto generated do not remove the tag below */ ###END_AUTOCODE + + const TIMEOUT = 120; // seconds after which to timeout the token + + /* + DB_DataObject calculates the sequence key(s) by taking the first key returned by the keys() function. + In this case, the keys() function returns user_id as the first key. user_id is not a sequence, but + DB_DataObject's sequenceKey() will incorrectly think it is. Then, since the sequenceKey() is a numeric + type, but is not set to autoincrement in the database, DB_DataObject will create a _seq table and + manage the sequence itself. This is not the correct behavior for the user_id in this class. + So we override that incorrect behavior, and simply say there is no sequence key. + */ + function sequenceKey() + { + return array(false,false); + } + + function makeNew($user) + { + $login_token = Login_token::staticGet('user_id', $user->id); + + if (!empty($login_token)) { + $login_token->delete(); + } + + $login_token = new Login_token(); + + $login_token->user_id = $user->id; + $login_token->token = common_good_rand(16); + $login_token->created = common_sql_now(); + + $result = $login_token->insert(); + + if (!$result) { + common_log_db_error($login_token, 'INSERT', __FILE__); + throw new Exception(sprintf(_('Could not create login token for %s'), + $user->nickname)); + } + + return $login_token; + } }