Hi,

I studied the source code of auth.login() and found that all the 
validations are applied within the login method itself. The error message 
is automatically written to an element of class flash via setting 
session.flash to auth.messages.invalid_login.

I modified my view code to include the class attribute of the <td> and set 
its value to "flash" as below:

<td class="flash">{{=response.flash}}</td>

Now one can modify the CSS and JS to control how the element is displayed.

As far as I understand, to achieve the required functionality of displaying 
form errors via form.errors.email etc., one can either extend Auth and 
override the login() method or build a custom login functionality.

Let me know if there is an easier way

On Tuesday, March 13, 2012 11:02:54 AM UTC+5:30, Sushant Taneja wrote:
>
> Hi,
>
> Ah, I forget that form.custom.begin is an XML object (more like a string) 
>> and doesn't change when you directly manipulate the form object itself. You 
>> could do:
>>
>> f.custom.begin = '%s id="login">' % f.custom.begin[:-1]
>>
>
>  I added the above code line in controller. The attribute id was added to 
> the form element, but the whole <form> being tag was rendered as :
>
> *"*
>     <form method="post" id="login">*"*
> *
> *
> i.e form is displayed a text element and hence JS was not working on it.
>
>  
>
>>     if login_form.errors:
>>>         login_form.errors.email='Email/Password does not match'
>>>
>>>     return dict(login_form=login_form)
>>>
>>> In the view I have :
>>>
>>>                     <tr class="error">
>>>                         <td colspan="2"><!-- Show error here --></td>
>>>                     </tr>
>>>
>>
>> Maybe something like:
>>
>>     {{if login_form.errors.email:}}
>>     <tr class="error">
>>         <td colspan="2">{{=login_form.errors.email}}</td>
>>     </tr>
>>     {{pass}}
>>
>>
> I didn't want to render the <tr> element dynamically, so I tried the 
> following:
>
>                     <tr class="error">
>                         <td colspan="2">
>                             {{if login_form.errors:}}
>                                 {{=login_form.errors.email}}
>                                 {{pass}}
>                         </td>
>                     </tr>
>
> But nothing is happening. 
> In usual cases, if I leave the field empty or enter an invalid email 
> address, an error is displayed but not in this case.
> Even if there are errors, the *login_form.errors* object is empty and 
> nothing is displayed.
>
> How does auth handle authentication errors ?
>
>

Reply via email to