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?
>>>
>>>