finalising default and index :Private expurgation
[catagits/Catalyst-Manual.git] / lib / Catalyst / Manual / Tutorial / Authentication.pod
index ff5545b..66225d8 100644 (file)
@@ -357,9 +357,11 @@ you could have a C<User> controller with 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 C<sub index : 
-Private> method (this was automatically inserted by the helpers when we 
-created the Login controller above), and delete this line:
+Then open C<lib/MyApp/Controller/Login.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 delete this 
+line:
 
     $c->response->body('Matched MyApp::Controller::Login in Login.');
 
@@ -371,7 +373,7 @@ Then update it to match:
     
     =cut
     
-    sub index : Private {
+    sub index :Path :Args(0) {
         my ($self, $c) = @_;
     
         # Get the username and password from form
@@ -403,22 +405,21 @@ will stay at the login page but receive an error message.  If the
 C<username> and C<password> values are not present in the form, the 
 user will be taken to the empty login form.
 
-Note that we could have used something like C<sub default :Private>; 
-however, the use of C<default> actions is discouraged because it does
-not receive path args as with other actions.  The recommended practice 
-is to only use C<default> in C<MyApp::Controller::Root>.
-
-Another option would be to use something like 
-C<sub base :Path :Args(0) {...}> (where the C<...> refers to the login 
-code shown in C<sub index : Private> above). We are using C<sub base 
-: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<base>, 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 
+Note that we could have used something like C<sub default :Path>,
+however partly for historical reasons, and partly for code clarity it
+is generally recommended 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 base :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>.
 
 Next, update the corresponding method in 
@@ -430,7 +431,7 @@ C<lib/MyApp/Controller/Logout.pm> to match:
     
     =cut
     
-    sub index : Private {
+    sub index :Path :Args(0) {
         my ($self, $c) = @_;
     
         # Clear the user's state
@@ -620,7 +621,10 @@ running) and restart it:
 B<IMPORTANT NOTE:> If you are having issues with authentication on 
 Internet Explorer, be sure to check the system clocks on both your 
 server and client machines.  Internet Explorer is very picky about 
-timestamps for cookies.
+timestamps for cookies.  Note that you can quickly sync an Ubuntu
+system with the following command:
+
+    sudo ntpdate ntp.ubuntu.com
 
 Now trying going to L<http://localhost:3000/books/list> and you should
 be redirected to the login page, hitting Shift+Reload if necessary (the