start work on single conroller
[catagits/Catalyst-Manual.git] / lib / Catalyst / Manual / Tutorial / 05_Authentication.pod
index d2e0257..23f577d 100644 (file)
@@ -223,11 +223,11 @@ C<StackTrace> is new):
         -Debug
         ConfigLoader
         Static::Simple
-
+    
         StackTrace
-
+    
         Authentication
-
+    
         Session
         Session::Store::FastMmap
         Session::State::Cookie
@@ -330,29 +330,29 @@ for details.
 
 =head2 Add Login and Logout Controllers
 
-Use the Catalyst create script to create two stub controller files:
+Use the Catalyst create script to create a stub controller file:
 
-    $ script/myapp_create.pl controller Login
-    $ script/myapp_create.pl controller Logout
+    $ script/myapp_create.pl controller Authentication
 
-You could easily use a single controller here.  For example, you could
-have a C<User> controller with both C<login> and C<logout> actions.
+You could easily use multiple controller's here.  For example, you could
+have a C<User> controller for both C<login> and C<logout> actions.
 Remember, Catalyst is designed to be very flexible, and leaves such
 matters up to you, the designer and programmer.
 
-Then open C<lib/MyApp/Controller/Login.pm>, locate the
+Then open C<lib/MyApp/Controller/Authentication.pm>, locate the
 C<sub index :Path :Args(0)> method (or C<sub index : Private> if you
 are using an older version of Catalyst) that was automatically
 inserted by the helpers when we created the Login controller above,
-and update the definition of C<sub index> to match:
+and remove the definition of C<sub index>. Add the following sub:
 
-    =head2 index
+    =head2 login
     
     Login logic
     
     =cut
     
-    sub index :Path :Args(0) {
+       # global means the path to it will be /login not /authenticaton/login
+    sub login :Global :Args(0) {
         my ($self, $c) = @_;
     
         # Get the username and password from form
@@ -367,13 +367,11 @@ and update the definition of C<sub index> to match:
                 # If successful, then let them use the application
                 $c->response->redirect($c->uri_for(
                     $c->controller('Books')->action_for('list')));
-                return;
+                return 1;
             } else {
-                # Set an error message
                 $c->stash(error_msg => "Bad username or password.");
             }
         } else {
-            # Set an error message
             $c->stash(error_msg => "Empty username or password.");
         }
     
@@ -381,10 +379,6 @@ and update the definition of C<sub index> to match:
         $c->stash(template => 'login.tt2');
     }
 
-Be sure to remove the 
-C<$c-E<gt>response-E<gt>body('Matched MyApp::Controller::Login in Login.');>
-line of the C<sub index>.
-
 This controller fetches the C<username> and C<password> values from the
 login form and attempts to authenticate the user.  If successful, it
 redirects the user to the book list page.  If the login fails, the user
@@ -398,16 +392,11 @@ and partly for code clarity) only to use C<default> in
 C<MyApp::Controller::Root>, and then mainly to generate the 404 not
 found page for the application.
 
-Instead, we are using "C<sub somename :Path :Args(0) {...}>" here to
-specifically match the URL C</login>. C<Path> actions (aka, "literal
-actions") create URI matches relative to the namespace of the
-controller where they are defined.  Although C<Path> supports
-arguments that allow relative and absolute paths to be defined, here
-we use an empty C<Path> definition to match on just the name of the
-controller itself.  The method name, C<index>, is arbitrary. We make
-the match even more specific with the C<:Args(0)> action modifier --
-this forces the match on I<only> C</login>, not
-C</login/somethingelse>.
+Instead, we are using "C<sub somename :Global :Args(0) {...}>" here to
+specifically match the URL C</login>. C<Global> actions create URI matches
+relative to the web root. We make the match even more specific with the
+C<:Args(0)> action modifier -- this forces the match on I<only> C</login>,
+not C</login/somethingelse>.
 
 Next, update the corresponding method in
 C<lib/MyApp/Controller/Logout.pm> to match:
@@ -585,6 +574,7 @@ box instead of using NTP.
 Open C<root/src/books/list.tt2> and add the following lines to the
 bottom (below the closing </table> tag):
 
+    ...
     <p>
       <a href="[% c.uri_for('/login') %]">Login</a>
       <a href="[% c.uri_for(c.controller.action_for('form_create')) %]">Create</a>
@@ -649,8 +639,6 @@ the closing "1;":
     # with hex encoding; Generate the 'check_password" method
     __PACKAGE__->add_columns(
         'password' => {
-            data_type           => "TEXT",
-            size                => undef,
             encode_column       => 1,
             encode_class        => 'Digest',
             encode_args         => {salt_length => 10},