Hey Massimo,

You've steered me in the right direction.

Basically I've had to put in a pure opening html form element in, and then 
use the custom form widgets afterwards. Works now. Resulting in:

<form action="user/login" method="post">
    {{=form.custom.widget.email}}
    {{=form.custom.widget.password}}
{{=form.custom.end}}

The

form['_action'] = URL('user/login')

or

form.attributes['_action'] = URL('user/login')


for some reason didn't want to work. 

Cheers,

Rhys

On Sunday, May 6, 2012 3:50:52 PM UTC+10, Massimo Di Pierro wrote:
>
> This is because of the mechanism to prevent CSRF attacks.
> There are supposed to be two hidden fields, one is the formname. The other 
> is the formkey (a unique onetime token).
>
> Try:
>
> {{
> form=auth.login()
> form['_action']=URL('user/login')
> }}
> {{=form.custom.begin}}
> {{=form.custom.widget.email}}
> {{=form.custom.widget.password}}
> <input type="submit" value="login">
> <input type="hidden" name="_next" value="/feed">
> {{=form.custom.end}}
>
>
> On Saturday, 5 May 2012 23:37:57 UTC-5, Rhys wrote:
>>
>> Hey Alan,
>>
>> I don't want to redirect. I'll try and to explain it a bit more.
>>
>> Basically I have two forms. One which is a drop down, in pure html
>>
>> <form action="/user/login" method="post">
>>     <input type="hidden" name="_formname" value="login">
>>     <input type="hidden" name="_next" value="/feed">
>>    <input type="text" name="email" id="auth_user_email">
>>     <input type="password" name="password" id="aut_user_password">
>>     <input type="submit" value="login">
>> </form>
>>
>>
>>
>> ^ this Form is on every page which the user is not logged into. When they 
>> fill out this form and click submit I want the /user/login page to process 
>> it, but it is not doing so. When the page finds there is an error with the 
>> login or the user is not authorised, I would like the /user/login form 
>> which is exactly the same form as above but on another page with the drop 
>> down one removed, to present there was an error with the login.
>>
>> Both forms I've done in html so there is no form key to process. I'm 
>> trying to figure out why auth.login() doesn't process it as the 
>> form.accepts() method in auth.login() has the same formname. What is 
>> preventing it from being processed. It's driving me in sane. I'm stepping 
>> through the code in debug mode and can't find why it would not process it. 
>> It is basically a SQL form in html like described in the web2py book.
>>
>> Any insight would be great by any!
>>
>> On Sunday, May 6, 2012 12:19:49 AM UTC+10, Alan Etkin wrote:
>>>
>>> *auth.is_logged_in()* will return a bool object. True for authenticated 
>>> user and I belive *auth.user_id* attribute is None for the non 
>>> authenticated user. *auth *being the Auth class instance created by the 
>>> welcome scaffolding application.
>>>
>>> You could use the returned values to catch unsuccessful authentication 
>>> and redirect to the correct action
>>>
>>> There is an Auth setting for failed authentication (for example, it's 
>>> possible to call a function on failed login)
>>> ("Settings and Messages", web2py book 4th edition, 9.3.7)
>>>
>>> auth.settings.on_failed_authentication = lambda url: redirect(url)
>>>
>>> On Saturday, May 5, 2012 9:51:23 AM UTC-3, Rhys wrote:
>>>>
>>>> I'm creating a custom drop down login form for all pages where the user 
>>>> isn't logged in. Once they try and login through this form if it 
>>>> is unsuccessful it redirects to the /user/login page with the auth.login 
>>>> form. How do I get a error if the login has resulted in an invalid login. 
>>>> As there are two forms I've tried also tried to do a form out of html so 
>>>> there is no form key. Still no luck. Is it s simple variable I can use to 
>>>> determine if it is successful? 
>>>
>>>

Reply via email to