Thanks for an explanatory answer.
I will try this out.

On Monday, March 12, 2012 7:49:28 PM UTC+5:30, Anthony wrote:
>
> def index():
>>
>>     login_form = auth.login()
>>     if login_form.process(session=None,formname='login').accepted:
>>         pass
>>     elif login_form.errors:
>>         response.write(request.vars)
>>     return dict()
>>
>> to display the form I have used the SQLForm in HTML technique as 
>> mentioned in the web2py book
>>
>> Whenever user enters the correct email and password. auth_event registers 
>> a login event with the description *User 1 Logged In*.
>> The next property redirects the URL to /user/profile but auth.user object 
>> is *None.*
>>
>
> auth.login() handles it's own form processing, and it uses the session 
> when calling form.accepts (which adds a hidden _formkey field to the form, 
> which must be present upon form submission). In your code, you do not 
> return the form object to the view, which means your view cannot include 
> the hidden _formkey field, which is therefore not submitted with the form. 
> So, when the form is submitted, the form.accepts in auth.login() fails, 
> which means the user object is never stored in session.auth.user -- hence, 
> auth.user is None. The reason the login submission is successful is that 
> your index() function then does its own processing of the login form, which 
> is successful -- but your explicit call to login_form.process() does not do 
> anything to set auth.user, so it is never set.
>
> In short, you should not be doing your own processing of the login form -- 
> let auth.login() handle that. And if you want to customize the form display 
> in the view, you still have to return the form to the view so you can 
> include the hidden _formkey and _formname fields in the form (you can use 
> form.custom.end to do that).
>
> Anthony
>

Reply via email to