.. _creating-an-account:

Creating an Account
###################

If you want to use a particular installation of Bugzilla, first you need to
create an account. Ask the administrator responsible for your installation
for the URL you should use to access it. If you're test-driving Bugzilla,
you can use one of the installations on
`Landfill <http://landfill.bugzilla.org/>`_.

The process of creating an account is similar to many other websites.

#. On the home page, click the :guilabel:`New Account` link in the header.
   Enter your email address, then click the ``Send``
   button.

   .. note:: If the :guilabel:`New Account` link is not available, this means that the
      administrator of the installation has disabled self-registration.
      Speak to the administrator to find out how to get an account.

#. Within moments, you should
   receive an email to the address you provided, which contains your
   login name (generally the same as the email address), and a URL to
   click to confirm your registration.

#. Once you confirm your registration, Bugzilla will ask you your real name
   (optional, but recommended) and ask you to choose a password. Depending
   on how your Bugzilla is configured, there may be minimum complexity
   requirements for the password.

#. Now all you need to do is to click the :guilabel:`Log In`
   link in the header or footer,
   enter your email address and the password you just chose into the
   login form, and click the :guilabel:`Log in` button.

You are now logged in. Bugzilla uses cookies to remember you are
logged in, so, unless you have cookies disabled or your IP address changes,
you should not have to log in again during your session.
