When you manipulate the form object after it has been created,
form.custom.begin and form.custom.end are the only two things that are not
affected. That is because they are both XML() objects and not regular HTML
helper objects (they cannot be regular helper objects because they are not
full HTML elements -- .begin is just the opening form tag, and .end
includes only the closing part of the form tag). Instead, you have to
manipulate them more like strings:
{{=form.custom.begin.replace('""', '"/user/login"')}}
Anthony
On Monday, May 7, 2012 7:32:44 AM UTC-4, Rhys wrote:
>
> Hey Massimo,
>
> The
>
> {{form=auth()}}
> {{form['_acton'] = "/user/login"}}
> {{=form.custom.begin}}
>
>
> spat out the html without the updated action
>
> <html action="" method="post" enctype="multipart/form-data">
>
>
> Cheers,
>
> Rhys
>
>
> On Monday, May 7, 2012 12:52:20 AM UTC+10, Massimo Di Pierro wrote:
>>
>> Interesting. When you say it did not work. What html did it generate?
>>
>> On Sunday, 6 May 2012 03:25:41 UTC-5, Rhys wrote:
>>>
>>> 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?
>>>>>>
>>>>>>