autentizace v administraci

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mardon
Člen | 59
+
0
-

Chtěla bych si pro svůj web zprovoznit administraci. Vycházela jsem z příkladu CD-collection, přihlašovací formulář mi funguje a přesměruje na /presenters/AdminModule/HomepagePresenter

<?php
class Admin_HomepagePresenter extends Admin_BasePresenter
?>

/presenters/AdminModule/BasePresenter

<?php
abstract class Admin_BasePresenter extends BasePresenter{

    protected function startup()
	{
		// user authentication
		$user = Environment::getUser();
		if (!$user->isAuthenticated()) {
			if ($user->getSignOutReason() === User::INACTIVITY) {
				$this->flashMessage('You have been logged out due to inactivity. Please login again.');
			}
			$backlink = $this->getApplication()->storeRequest();
			$this->redirect('Admin:default', array('backlink' => $backlink));
		}

		parent::startup();
	}
}
?>

z /presenters/AdminModule/HomepagePresenter bych chtěla přejít na /presenters/AdminModule/ServicePresenter, kde chci použít fomulář pro vložení a editaci záznamu v db

<?php

class Admin_ServicePresenter extends Admin_BasePresenter {

    public function renderDefault() {
        $service = new ServiceModel();
        $this->template->service = $service->getService(array('date' => dibi::DESC));

    }

    public function renderEdit($id = 0) {
        $form = $this['serviceForm'];
        if (!$form->isSubmitted()) {
            $service = new ServiceModel();
            $data = $service->getServiceid($id);
            if (!$data) {
                throw new BadRequestException('Record not found');
            }
            $form->setDefaults($data);
        }
    }

   protected function createComponentServiceForm() {
        $form = new AppForm;
        $form->addText('name', 'Název služby:')
                ->addRule(Form::FILLED, 'Název služby.');

        $form->addText('id_cat', 'Kategorie:')
                ->addRule(Form::FILLED, 'Please enter a title.');


        $form->addSubmit('save', 'Save')->getControlPrototype()->class('default');
        $form->addSubmit('cancel', 'Cancel')->setValidationScope(NULL);
        $form->onSubmit[] = callback($this, 'serviceFormSubmitted');


        $form->addProtection('Please submit this form again (security token has expired).');
        return $form;
    }




        public function serviceFormSubmitted(AppForm $form) {
            if ($form['save']->isSubmittedBy()) {
                $id = (int) $this->getParam('id');
                $service = new ServiceModel();
                if ($id > 0) {
                    $service->update($id, $form->getValues());
                    $this->flashMessage('Služba byla upravena.');
                } else {
                    $service->insert($form->getValues());
                    $this->flashMessage('Služba byla přidána.');
                }
            }
        }

}
?>

Problémem je , že při zavolání editace v ServicePresenteru mi vyskočí znovu přihlašovací okno tedy systém mě odhlásil, nebo nepoznal , že jsem byl přihlášená.

iguana007
Člen | 970
+
0
-

A jak resis to prihlaseni? Tj. ukaz jak zpracovavas odeslany login form? Tam bude imho chyba.

mardon
Člen | 59
+
0
-
<?php



class LoginPresenter extends BasePresenter {
    /** @persistent */
    public $backlink = '';



    /********************* component factories *********************/



    /**
     * Login form component factory.
     * @return mixed
     */
    protected function createComponentLoginForm() {
        $form = new AppForm;
        $form->addText('username', 'Jméno:')
                ->addRule(Form::FILLED, 'Zadejte jméno.');

        $form->addPassword('password', 'Heslo:')
                ->addRule(Form::FILLED, 'Zadejte heslo.');

        $form->addSubmit('login', 'Přihlásit');

        $form->addProtection('Please submit this form again (security token has expired).');

        $form->onSubmit[] = callback($this, 'loginFormSubmitted');

        return $form;
    }



    public function loginFormSubmitted($form) {
        try {
            $user = Environment::getUser();
            $user->authenticate($form['username']->getValue(), $form['password']->getValue());
            $this->getApplication()->restoreRequest($this->backlink);
            $this->redirect('Admin:Homepage:');

        } catch (AuthenticationException $e) {
            $form->addError($e->getMessage());
        }
    }


}
?>
Jan Endel
Člen | 1016
+
0
-

A co authentikátor, jak ten vypadá ?

mardon
Člen | 59
+
0
-
<?php

/**
 * My Application
 *
 * @copyright  Copyright (c) 2010 John Doe
 * @package    MyApplication
 */



/**
 * Users authenticator.
 *
 * @author     John Doe
 * @package    MyApplication
 */
class UsersModel extends BaseModel implements IAuthenticator
{

	/**
	 * Performs an authentication
	 * @param  array
	 * @return IIdentity
	 * @throws AuthenticationException
	 */
	public function authenticate(array $credentials)
	{
		$username = $credentials[self::USERNAME];
		$password = md5($credentials[self::PASSWORD]);

		$row = $this->db->fetch('SELECT * FROM users WHERE login=%s', $username);

		if (!$row) {
			throw new AuthenticationException("User '$username' not found.", self::IDENTITY_NOT_FOUND);
		}

		if ($row->password !== $password) {
			throw new AuthenticationException("Invalid password.", self::INVALID_CREDENTIAL);
		}

		unset($row->password);
		return new Identity($row->id,$row);
	}

}
?>