Jump to content
xt:Commerce Community Forum

Weiterleitung auf Passwort ?ndern nach 30 Tagen.


Recommended Posts

Hallo Leute,

ich habe folgendes Problem:

Ich m?chte, dass die registrierten User im Shop nach 30 Tagen aufgefordert werden ihr Passwort zu ?ndern.

ich hab es bisher mit folgendem Code versucht:


$check_timestamp = xtc_db_query("select password_timestamp from " . TABLE_CUSTOMERS . "where customers_username = '" . xtc_db_input($username) . " ' ");

// $timestamp = xtc_db_fetch_array($check_timestamp);


$seconds_30days = 2592000;

$time = time()


if (($time - $check_timestamp) > $seconds_30days)  {


//  xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORT));



}

else

{


//  xtc_redirect(xtc_href_link(FILENAME_DEFAULT));


}

Hier kurz eine Erkl?rung:

Die Datenbankabfrage funktioniert, nur die Weiterleitung funktioniert nicht.

Ich denke es h?ngt mit dem redirect zusammen, da der Header schon ?bergeben worden ist. Hab den deshalb erst mal auskommentiert.

Ich w?rde mich ?ber eine Antwort und m?gliche L?sungsvorschl?ge sehr freuen.

Gr??e

Frederik

Link to comment
Share on other sites

Aktueller Code:


$check_timestamp = xtc_db_query("select password_timestamp from " . TABLE_CUSTOMERS . "where customers_username = '" . xtc_db_input($username) . " ' ");

$timestamp = xtc_db_fetch_array($check_timestamp);


$seconds_30days = 2592000;

$time = time()


if (($time - $timestamp['password_timestamp']) > $seconds_30days)  {

  xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORT));

}

else

{

  xtc_redirect(xtc_href_link(FILENAME_DEFAULT));

}

Link to comment
Share on other sites

Originally posted by incom@Jun 13 2005, 08:56 AM

Hallo Leute,

ich habe folgendes Problem:

Ich m?chte, dass die registrierten User im Shop nach 30 Tagen aufgefordert werden ihr Passwort zu ?ndern.

ich hab es bisher mit folgendem Code versucht:



$check_timestamp = xtc_db_query("select password_timestamp from " . TABLE_CUSTOMERS . "where customers_username = '" . xtc_db_input($username) . " ' ");

// $timestamp = xtc_db_fetch_array($check_timestamp);


$seconds_30days = 2592000;

$time = time()


if (($time - $check_timestamp) > $seconds_30days)  {


//  xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORT));

}

else

{


//  xtc_redirect(xtc_href_link(FILENAME_DEFAULT));


}

Hier kurz eine Erkl?rung:

Die Datenbankabfrage funktioniert, nur die Weiterleitung funktioniert nicht.

Ich denke es h?ngt mit dem redirect zusammen, da der Header schon ?bergeben worden ist. Hab den deshalb erst mal auskommentiert.

Ich w?rde mich ?ber eine Antwort und m?gliche L?sungsvorschl?ge sehr freuen.

Gr??e

Frederik

Quoted post

In welchem Modul soll dieser Code denn ablaufen?

Link to comment
Share on other sites

@gswkaiser

ja das ganze soll in die login.php implementiert werden.

@Hubi

Es funktioniert noch nicht wirklich. Ich werde immer auf die index.php weitergeleitet, egal ob die bedingung erf?llt ist oder nicht.

Ich denke ich muss das ganze auch nochmal ?berarbeiten, da der User dann in den shop eingeloggt werden soll wenn das passwort noch nicht abgelaufen ist. Wobei er mich immer nur auf die Startseite weiterleitet, auf der man sich einloggen kann.

Link to comment
Share on other sites

An welcher Stelle hast Du das in der login.php eingebaut? Poste einfach mal Deine ganze Datei.

Die sql stimmt nicht, da Du dich ja mit der eMail-Adresse einloggst oder hast Du das ge?ndert?

Aber der User muss auch eingeloggt werden, wenn das PW abgelaufen ist, sonst kann er das ja nicht ?ndern.

Link to comment
Share on other sites

Also wir haben statt der Emailadresse einen Benutzernamen eingebaut.

Eben wenn er das Passwort ?ndern will muss er vorher eingeloggt werden. Nur hab ich noch keine ahnung wo ich das ganze dann hinschieben soll.

Wenn ich den code unterhalb der loginabfrage stelle, passiert ?berhaupt gar nix. er loggt sich ohne probleme ein als ob nix w?re.

hier die komplette datei.

<?php

/* -----------------------------------------------------------------------------------------

  $Id: login.php,v 1.9 2004/02/17 21:13:26 fanta2k Exp $  


  XT-Commerce - community made shopping

  http://www.xt-commerce.com


  Copyright (c) 2003 XT-Commerce

  -----------------------------------------------------------------------------------------

  based on: 

  (c) 2000-2001 The Exchange Project (earlier name of osCommerce)

  (c) 2002-2003 osCommerce(login.php,v 1.79 2003/05/19); [url]www.oscommerce.com[/url] 

  (c) 2003   nextcommerce (login.php,v 1.13 2003/08/17); [url]www.nextcommerce.org[/url]


  Released under the GNU General Public License 

  -----------------------------------------------------------------------------------------

  Third Party contribution:


  guest account idea by Ingo T. <[email protected]>

  ---------------------------------------------------------------------------------------*/


 include( 'includes/application_top.php');

  // create smarty elements

 $smarty = new Smarty;

 // include boxes

 require(DIR_FS_CATALOG .'templates/'.CURRENT_TEMPLATE. '/source/boxes.php'); 


 // include needed functions

 require_once(DIR_FS_INC . 'xtc_draw_password_field.inc.php');

 require_once(DIR_FS_INC . 'xtc_validate_password.inc.php');

 require_once(DIR_FS_INC . 'xtc_array_to_string.inc.php');

 require_once(DIR_FS_INC . 'xtc_image_button.inc.php');

 require_once(DIR_FS_INC . 'xtc_php_mail.inc.php');


 require_once(DIR_WS_CLASSES . 'class.phpmailer.php');


 // redirect the customer to a friendly cookie-must-be-enabled page if cookies are disabled (or the session has not started)

 if ($session_started == false) {

  xtc_redirect(xtc_href_link(FILENAME_COOKIE_USAGE));

 }


 if (isset($_GET['action']) && ($_GET['action'] == 'process')) {

//  $email_address = xtc_db_prepare_input($_POST['email_address']);

  $username = xtc_db_prepare_input($_POST['email_address']);

  $password = xtc_db_prepare_input($_POST['password']);

  $IP = ($_SERVER['REMOTE_ADDR']);

  $mailtext = $username . ' hat sich mit folgender IP' . $IP . ' falsch angemeldet.';



//timestamp abfrage


  $check_timestamp = xtc_db_query("select password_timestamp from " . TABLE_CUSTOMERS . " where customers_username = '" . xtc_db_input($username) . "'");

  $timestamp = xtc_db_fetch_array($check_timestamp); 

  $seconds_30days = '2592000';

  $time = time();


   if (($time - $timestamp['password_timestamp']) > $seconds_30days)  {

     xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORD));   

   }

   else

   {

     xtc_redirect(xtc_href_link(FILENAME_DEFAULT));

   }




  // Check if email exists

  $check_customer_query = xtc_db_query("select customers_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, customers_default_address_id, customers_username from " . TABLE_CUSTOMERS . " where customers_username = '" . xtc_db_input($username) . "'");

  if (!xtc_db_num_rows($check_customer_query)) {

   $_GET['login'] = 'fail';

   $info_message=TEXT_NO_EMAIL_ADDRESS_FOUND;

     } else {

   $check_customer = xtc_db_fetch_array($check_customer_query);

   // Check that password is good

   if (!xtc_validate_password($password, $check_customer['customers_password'])) {

    $_GET['login'] = 'fail';

    $info_message=TEXT_LOGIN_ERROR;




	//email an [email][email protected][/email] wegen login fehler  

	xtc_php_mail(EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME,EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME, '' , '[email protected]' , 'Webmaster' , '' , '' , 'Fehlerhafte Benutzeranmeldung' , '' ,$mailtext);


	}

   else {

    if (SESSION_RECREATE == 'True') {

     xtc_session_recreate();

	}



    $check_country_query = xtc_db_query("select entry_country_id, entry_zone_id from " . TABLE_ADDRESS_BOOK . " where customers_id = '" . (int)$check_customer['customers_id'] . "' and address_book_id = '" . $check_customer['customers_default_address_id'] . "'");

    $check_country = xtc_db_fetch_array($check_country_query);


    $_SESSION['customer_gender'] = $check_customer['customers_gender'];

    $_SESSION['customer_last_name'] = $check_customer['customers_lastname'];

    $_SESSION['customer_id'] = $check_customer['customers_id'];

    $_SESSION['customer_default_address_id'] = $check_customer['customers_default_address_id'];

    $_SESSION['customer_first_name'] = $check_customer['customers_firstname'];

    $_SESSION['customer_country_id'] = $check_country['entry_country_id'];

    $_SESSION['customer_zone_id'] = $check_country['entry_zone_id'];


    $date_now = date('Ymd');

    xtc_db_query("update " . TABLE_CUSTOMERS_INFO . " set customers_info_date_of_last_logon = now(), customers_info_number_of_logons = customers_info_number_of_logons+1 where customers_info_id = '" . (int)$_SESSION['customer_id'] . "'");


    // restore cart contents

    $_SESSION['cart']->restore_contents();


    if (sizeof($_SESSION['navigation']->snapshot) > 0) {

     $origin_href = xtc_href_link($_SESSION['navigation']->snapshot['page'], xtc_array_to_string($_SESSION['navigation']->snapshot['get'], array(xtc_session_name())), $_SESSION['navigation']->snapshot['mode']);

     $_SESSION['navigation']->clear_snapshot();

     xtc_redirect($origin_href);

    } else {

     xtc_redirect(xtc_href_link(FILENAME_DEFAULT));

    }

   }

  }

 }




 $breadcrumb->add(NAVBAR_TITLE_LOGIN, xtc_href_link(FILENAME_LOGIN, '', 'SSL'));

 require(DIR_WS_INCLUDES . 'header.php'); 


if ($_GET['info_message']) $info_message=$_GET['info_message'];

$smarty->assign('info_message',$info_message);

$smarty->assign('account_option',ACCOUNT_OPTIONS);

$smarty->assign('BUTTON_NEW_ACCOUNT','<a href="' . xtc_href_link(FILENAME_CREATE_ACCOUNT, '', 'SSL') . '">' . xtc_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>');

$smarty->assign('BUTTON_LOGIN',xtc_image_submit('button_login.gif', IMAGE_BUTTON_LOGIN));

$smarty->assign('BUTTON_GUEST','<a href="' . xtc_href_link(FILENAME_CREATE_GUEST_ACCOUNT, '', 'SSL') . '">' . xtc_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>');

$smarty->assign('FORM_ACTION',xtc_href_link(FILENAME_LOGIN, 'action=process', 'SSL'));

$smarty->assign('INPUT_MAIL',xtc_draw_input_field('email_address'));

$smarty->assign('INPUT_USERNAME',xtc_draw_input_field('username'));

$smarty->assign('INPUT_PASSWORD',xtc_draw_password_field('password'));

$smarty->assign('LINK_LOST_PASSWORD',xtc_href_link(FILENAME_PASSWORD_FORGOTTEN, '', 'SSL'));



 $smarty->assign('language', $_SESSION['language']);

 $smarty->caching = 0;

 $main_content=$smarty->fetch(CURRENT_TEMPLATE . '/module/login.html');

 $smarty->assign('main_content',$main_content);


 $smarty->assign('language', $_SESSION['language']);

 $smarty->caching = 0;

 if (!defined(RM)) $smarty->load_filter('output', 'note'); 

 $smarty->display(CURRENT_TEMPLATE . '/login_index.html');


?>

Link to comment
Share on other sites

Hat denn der angemeldete User eine Timestamp > 30 Tage?

Vom Code her kann ich da kein Problem erkennen.

Aus Performance-Gr?nden w?rde ich die Timestamp-Abfrage aber mit in die vorhandene Kunden-Abfrage aufnehmen, das spart einen DB-Zugriff.

Vor allem auch, weil Du bei Deiner L?sung auch nicht pr?fst, ob der Username legal ist! (if (!xtc_db_num_rows($check_customer_query)).....)

Link to comment
Share on other sites

Hi,

also ich habe mal den Rat befolgt und das ganze in die Abfrage von davor geschrieben. Aber es besteht immer noch folgendes Problem:

Wenn ich mich anmelde, kann ich mich vollkommen normal einloggen, ohne das eine Meldung kommt das ich mein Passwort ?ndern muss. Dabei wird jedem User beim registrieren ein Timestamp zugeordnet und dieser wird auch abgefragt. Ich bin im Moment etwas ?berfragt was das sein k?nnte. K?nnte es die Reinfolge sein in der Abgefragt wird? oder wodran k?nnte es eurer Meinung nach vllt. liegen?

Gr??e aus Bonn


  // Check if email exists

  $check_customer_query = xtc_db_query("select password_timestamp, customers_id, customers_firstname,customers_lastname, customers_gender, customers_password, customers_email_address, customers_default_address_id, customers_username from " . TABLE_CUSTOMERS . " where customers_username = '" . xtc_db_input($username) . "'");

  if (!xtc_db_num_rows($check_customer_query)) {

   $_GET['login'] = 'fail';

   $info_message=TEXT_NO_EMAIL_ADDRESS_FOUND;

     } else {

   $check_customer = xtc_db_fetch_array($check_customer_query);

   // Check that password is good

   if (!xtc_validate_password($password, $check_customer['customers_password'])) {

    $_GET['login'] = 'fail';

    $info_message=TEXT_LOGIN_ERROR;


   if ((time() - $check_customer['password_timestamp']) > 2592000) {

   xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORD));

    }

    else

    {

     xtc_redirect(xtc_href_link(FILENAME_DEFAULT)); 

    }


/*

  $check_timestamp = xtc_db_query("select password_timestamp from " . TABLE_CUSTOMERS . " where customers_username = '" . xtc_db_input($username) . "'");

  $timestamp = xtc_db_fetch_array($check_timestamp); 

  $seconds_30days = 2592000;

  $time = time();


   if (($time - $timestamp['password_timestamp']) > $seconds_30days)  {

     xtc_redirect(xtc_href_link(FILENAME_NEW_PASSWORD));   

   }

   else

   {

     xtc_redirect(xtc_href_link(FILENAME_DEFAULT));

   }


*/


	//email an [email][email protected][/email] wegen login fehler  

	xtc_php_mail(EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME,EMAIL_SUPPORT_ADDRESS,EMAIL_SUPPORT_NAME, '' , '[email protected]' , 'Webmaster' , '' , '' , 'Fehlerhafte Benutzeranmeldung' , '' ,$mailtext);


	}

   else {

    if (SESSION_RECREATE == 'True') {

     xtc_session_recreate();

	}

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
  • Create New...