Development

Changeset 2343

You must first sign up to be able to contribute.

Changeset 2343

Show
Ignore:
Timestamp:
10/06/06 17:08:43 (6 years ago)
Author:
davedash
Message:

Ticket #922

Adding remember me functionality to sfGuardPlugin.

Note for this to work, config/factories.yml needs to have this key added:

all:

security_filter:

class: sfGuardBasicSecurityFilter

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • plugins/sfGuardPlugin/config/schema.xml

    r2208 r2343  
    6666    <column name="module_name" type="VARCHAR" size="100" required="true" primaryKey="true" /> 
    6767  </table> 
     68  <table name="sf_guard_remember_key" phpName="sfGuardPlugin" package="plugins.sfGuardPlugin.lib.model"> 
     69    <column name="user_id" type="integer" primaryKey="true"/> 
     70    <foreign-key foreignTable="sf_guard_user" onDelete="cascade"> 
     71      <reference local="user_id" foreign="id"/> 
     72    </foreign-key>  
     73    <column name="remember_key" type="varchar(32)" /> 
     74    <column name="ip_address" type="varchar(15)" primaryKey="true"/> 
     75    <column name="created_at" type="TIMESTAMP" /> 
     76     
     77  </table> 
    6878</database> 
    6979 
  • plugins/sfGuardPlugin/lib/user/sfGuardSecurityUser.class.php

    r2207 r2343  
    139139  } 
    140140 
    141   public function signIn($user
     141  public function signIn($user, $remember = false
    142142  { 
    143143    // signin 
     
    150150    $user->setLastLogin(time()); 
    151151    $user->save(); 
    152   } 
    153  
     152 
     153  // remember? 
     154  if ($remember) 
     155  { 
     156    // remove old keys 
     157    $c = new Criteria(); 
     158    $expiration_age = sfConfig::get('app_sf_guard_plugin_remember_key_expiration_age', 15 * 24 * 3600); 
     159    $c->add(sfGuardRememberKeyPeer::CREATED_AT, time()-$expiration_age, Criteria::LESS_THAN); 
     160    sfGuardRememberKeyPeer::doDelete($c); 
     161    // generate new keys 
     162    $key = $this->generate_random_key(); 
     163    // save key 
     164    $rk = new sfGuardRememberKey(); 
     165    $rk->setRememberKey($key); 
     166    $rk->setSfGuardUser($user); 
     167    $rk->setIpAddress($_SERVER['REMOTE_ADDR']); 
     168    $rk->save(); 
     169    // make key as a cookie 
     170    sfContext::getInstance()->getResponse()->setCookie('remember', $key, time()+$expiration_age); 
     171  } 
     172  } 
     173 
     174  protected function generate_random_key ($len = 20) 
     175  { 
     176  $string = ''; 
     177  $pool   = 'abcdefghijklmnopqrstuvwzyzABCDEFGHIJKLMNOPQRSTUVWZYZ0123456789'; 
     178  for ($i = 1; $i <= $len; $i++) { 
     179    $string .= substr($pool, rand(0,61), 1); 
     180  } 
     181 
     182    return md5($string); 
     183  } 
    154184  public function signOut() 
    155185  { 
     
    158188    $this->clearCredentials(); 
    159189    $this->setAuthenticated(false); 
     190  $expiration_age = sfConfig::get('app_sf_guard_plugin_remember_key_expiration_age', 15 * 24 * 3600); 
     191  sfContext::getInstance()->getResponse()->setCookie('remember', '', time()-$expiration_age); 
     192 
    160193  } 
    161194 
  • plugins/sfGuardPlugin/lib/validator/sfGuardUserValidator.class.php

    r1949 r2343  
    2626    $this->getParameterHolder()->set('username_error', 'Username or password is not valid.'); 
    2727    $this->getParameterHolder()->set('password_field', 'password'); 
     28    $this->getParameterHolder()->set('remember_field', 'remember'); 
     29 
    2830 
    2931    $this->getParameterHolder()->add($parameters); 
     
    3739    $password = $this->getContext()->getRequest()->getParameter($password_field); 
    3840 
     41  $remember = false; 
     42  $remember_field = $this->getParameterHolder()->get('remember_field'); 
     43    $remember = $this->getContext()->getRequest()->getParameter($remember_field); 
     44   
     45   
     46 
    3947    $username = $value; 
    4048 
     
    4755      if ($user->checkPassword($password)) 
    4856      { 
    49         $this->getContext()->getUser()->signIn($user); 
     57        $this->getContext()->getUser()->signIn($user, $remember); 
    5058 
    5159        return true; 
     
    5361    } 
    5462 
    55     $error = $this->getParameterHolder()->get('login_error'); 
     63    $error = $this->getParameterHolder()->get('username_error'); 
    5664 
    5765    return false; 
  • plugins/sfGuardPlugin/modules/sfGuardAuth/templates/signinSuccess.php

    r1949 r2343  
    1616    <?php echo input_password_tag('password') ?> 
    1717  </div> 
    18  
     18  <div class="form-row"> 
     19  <label for="remember">Rememeber me?</label> 
     20  <?php echo checkbox_tag('remember')?> 
     21  </div> 
    1922  </fieldset> 
    2023 
    2124  <?php echo input_hidden_tag('referer', $sf_request->getParameter('referer')) ?> 
     25   
    2226  <?php echo submit_tag('sign in') ?> 
    2327  <?php echo link_to('Forgot your password?', '@sf_guard_password') ?> 
  • plugins/sfGuardPlugin/modules/sfGuardAuth/validate/signin.yml

    r1949 r2343  
    1616    param: 
    1717      password:    password 
     18      remember:    remember