not authorised flash message when I used SQLFORM.grid, but worked fine with SQLFORM.smartgrid

132 views
Skip to first unread message

Rudy

unread,
Apr 22, 2017, 4:19:15 AM4/22/17
to web2py-users
Hi there,

It feels really strange to me that when i used SQLFORM.grid(), I got a flash message "not authorised", but when i used smartgrid(), it worked just fine (in both cases i had logged in already). I tried to removed @auth.requires_login(), but same behaviour happened. I seem to miss some very fundamental knowledge using SQLFORM.grid(). Below is the simplified code. Any help is much appreciated.

@auth.requires_login()
def list_items2():
    response.view='accounting/list_items.html'
    grid = SQLFORM.grid(db.auth_user)
    return locals()

Massimo Di Pierro

unread,
Apr 26, 2017, 9:50:59 PM4/26/17
to web2py-users
Strange what is the url that you are using to access this page?

Rudy

unread,
Apr 27, 2017, 10:12:35 AM4/27/17
to web2py-users
Hi Massimo,

url i used was "localhost:8000/myapp/accounting/list_item2", the actual table i tried to pull data out was named "quotation", it didn't work with SQLFORM.grid(), so i tried the very basic like example grid = SQLFORM.grid(db.auth_user), but still didn't work. But when I used SQLFORM.smartgrid() without changing anything, it worked.

The last few days I used SQLFORM.smartgrid() in order to continue develop my application, after i saw your note, I tried SQLFORM.grid(), it worked. It's really strange, apologize I may seem to waste your time, but I had that strange problem when i thought i didn't miss anything. If i can ever reproduce it, I'll let you know. Thanks so much!

akshay...@gmail.com

unread,
Jun 2, 2017, 7:07:36 AM6/2/17
to web2py-users
hi Rudy,
           I am facing the same issue. Did you get why this is happeneing?

Rudy Leung

unread,
Jun 2, 2017, 1:54:12 PM6/2/17
to web...@googlegroups.com
Hi Akshay,

I don’t know where the problem was. As mentioned in previous thread, after i used smartgrid to continue the development for a few days, it went away. One thing i notice is the editor from the administrative interface gets funny behavior sometimes, the compiler raises error but I simply can’t find what goes wrong with the specific line pointed out from the ticket, if I delete the line and retype exactly the same thing (I even had 2 lines side by side to compare the difference), the error goes away. But I can’t explain why below issue complains about “not authorised”, well try to refresh your editor or use another editor to check the code, perhaps restart web2py. I know it sounds silly, but they are quick test. cheers!

--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to a topic in the Google Groups "web2py-users" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/web2py/yhj6iVXgHEM/unsubscribe.
To unsubscribe from this group and all its topics, send an email to web2py+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Leandro Paz

unread,
Jun 2, 2017, 4:51:00 PM6/2/17
to web...@googlegroups.com
Tenta colocar no SQLForm.grid o parâmetro: user_signature=False

Ficará assim:
grid = SQLFORM.grid (db.auth_user, user_signature = False)



akshay0...@gmail.com

unread,
Jun 5, 2017, 1:11:25 AM6/5/17
to web2py-users
Hi rudy,
          yes you are right. Web2py editor behaves funny sometimes. Sometimes you get error and same error goes away when you rewrite the same code.

I could't use the smartgrid because smartgrid works on complete table but i had to query the table first. so only option for me was SQLFORM.grid.

I still don't know what the problem was but solution given by @Leandro Paz worked.

you just have to do:
grid = SQLFORM.grid (db.auth_user, user_signature = False)



Anthony

unread,
Jun 5, 2017, 9:14:48 AM6/5/17
to web2py-users
On Monday, June 5, 2017 at 1:11:25 AM UTC-4, akshay0...@gmail.com wrote:
I could't use the smartgrid because smartgrid works on complete table but i had to query the table first.

The smartgrid has the "constraints" argument for that purpose (it is a dictionary with table names as keys and DAL queries as values). See http://web2py.com/books/default/chapter/29/07/forms-and-validators#smartgrid-signature.
 
I still don't know what the problem was but solution given by @Leandro Paz worked.

you just have to do:
grid = SQLFORM.grid (db.auth_user, user_signature = False)


I don't think that is related to the problem Rudy is having. By default, user_signature=True, which simply means the grid will not display create/edite/delete buttons (nor allow those operations). You wouldn't get a "not authorized" message simply by attempting to load the grid. Furthermore, for logged in users, create/edit/delete is allowed, even with user_signature=True, and Rudy indicated his code started with using the @auth.requires_login() decorator, which requires a logged in user.

Anthony

Rudy

unread,
Jun 6, 2017, 1:44:10 AM6/6/17
to web2py-users
Hi Akshay,

Thanks for confirming Leandro Paz suggestion and replying me, I truly think this forum needs all of us (even I still have a lot to learn in web2py) to participate to share scenarios and solutions.

For smartgrid, you can still use query I believe, I have something like below. Good luck, hope to see you here again.

query=db.quotation.id == quote_id
        grid = SQLFORM.smartgrid(db.quotation, args=request.args[:1], constraints=dict(quotation=query), ....)

Rudy

unread,
Jun 6, 2017, 2:23:20 AM6/6/17
to web2py-users
Right on Anthony, I don't think user_signature=False is the real fix for the strange behaviour. When i tested it, i did log in, plus i used smartgrid the same way. Thanks for confirming it.

dave....@gmail.com

unread,
Feb 6, 2018, 4:21:33 PM2/6/18
to web2py-users
Just ran into and fixed this problem after much trial and error. In short, the URL that links to this controller method needs to have the user_signature=True attribute: In our case this was a link from another form grid:

...
        links=[
            dict(
                header='Manage',
                body=lambda row: A(SPAN(' Members', _class='fa fa-user-circle'),
                     _href=URL('membership', args=[row.id], user_signature=True),
                     _class='btn btn-primary btn-sm'
                )
            )
        ],
...

We noticed that if we switched the URL args to vars it also worked. We wanted the pretty URL though so found that the user_signature worked. One other thing to note: If you plan to use args like we did here the SQLform.grid on the recipient page will need the args=request.args[:1] or similar attrbute so all of its automatically generated links will include the args as well.

grid = SQLFORM.grid(
        ...
        args=request.args[:1],
        ...
)

Dave
Reply all
Reply to author
Forward
0 new messages