Problem with auth_login: too many redirects

158 views
Skip to first unread message

man24

unread,
May 10, 2012, 1:22:14 AM5/10/12
to web...@googlegroups.com
Sorry for reposting the question.  I am following the 'wiki' example given in the web2py book.  After first implementation, it worked fine, however, now when I click on any action that requires login or even clicking the 'login' from the top menu, I get this response from my web browser:  'too many redirects occurred when trying to open'.  Any idea what could be wrong.  The 'wiki' app was working fine yesterday and I haven't made any changes and now today it's giving this problem.  BTW, I am running web2py on a mac.  Thanks for your help.

Anthony

unread,
May 10, 2012, 7:09:09 AM5/10/12
to web...@googlegroups.com
Can you post your exact code (models, controllers, views)?

man24

unread,
May 10, 2012, 11:33:34 AM5/10/12
to web...@googlegroups.com
Here is the model file - > db2.py 

# coding: utf8
db.define_table('page',
        Field('title', requires=IS_NOT_IN_DB(db, 'page.title')),
        Field('body', 'text', requires=IS_NOT_EMPTY()),
        Field('created_on', 'datetime', default=request.now, readable=False, writable=False),
        Field('created_by', db.auth_user, default=auth.user_id, readable=False, writable=False),
        format='%(title)s')
        
db.define_table('comment',
        Field('page_id', db.page, readable=False, writable=False),
        Field('body', 'text', requires=IS_NOT_EMPTY()),
        Field('created_on', 'datetime', default=request.now, readable=False, writable=False),
        Field('created_by', db.auth_user, default=auth.user_id,readable=False, writable=False))
        
db.define_table('document',
        Field('page_id', db.page, readable=False, writable=False),
        Field('name', requires=IS_NOT_IN_DB(db, 'document.name')),
        Field('file', 'upload'),
        Field('created_on', 'datetime', default=request.now, readable=False, writable=False),
        Field('created_by', db.auth_user, default=auth.user_id, readable=False, writable=False),
        format='%(name)s')

Here is the controller: 

def index():
    pages = db().select(db.page.id, db.page.title, orderby=db.page.title)
    return dict(pages=pages)
    
@auth.requires_login()
def create():
    form=crud.create(db.page, next=URL('index'))
    return dict(form=form)
    
def show():
    this_page = db.page(request.args(0)) or redirect(URL('index'))
    db.comment.page_id.default = this_page.id
    form = crud.create(db.comment) if auth.user else None
    pagecomments = db(db.comment.page_id==this_page.id).select()
    return dict(page=this_page, comments=pagecomments, form=form)

@auth.requires_login()
def edit():
    this_page = db.page(request.args(0)) or redirect(URL('index'))
    form = crud.update(db.page, this_page, next=URL('show', args=request.args))
    return dict(form=form)
    
@auth.requires_login()
def documents():
    page = db.page(request.args(0)) or redirect(URL('index'))
    db.document.page_id.default = page.id
    db.document.page_id.writable = False
    grid = SQLFORM.grid(db.document.page_id==page.id, args=[page.id])
    return dict(page=page, grid=grid)
    
@auth.requires_login()
def user():
    """
    exposes:
    http://..../[app]/default/user/login
    http://..../[app]/default/user/logout
    http://..../[app]/default/user/register
    http://..../[app]/default/user/profile
    http://..../[app]/default/user/retrieve_password
    http://..../[app]/default/user/change_password
    use @auth.requires_login()
        @auth.requires_membership('group name')
        @auth.requires_permission('read','table name',record_id)
    to decorate functions that need access control
    """
    return dict(form=auth())

Here are the views:
Index:
{{left_sidebar_enabled,right_sidebar_enabled=False,True}}
{{extend 'layout.html'}}
<h1>Available Wiki Pages</h1>
[ {{=A('search', _href=URL('search'))}} ]<br />
<ul>{{for page in pages:}}
       {{=LI(A(page.title, _href=URL('show', args=page.id)))}}
{{pass}}</ul>
[ {{=A('create page', _href=URL('create'))}}]

Create:
{{extend 'layout.html'}}
<h1>Create new wiki page</h1>
{{=form}}

Show:
{{extend 'layout.html'}}
<h1>{{=page.title}}</h1>
[ {{=A('edit', _href=URL('edit', args=request.args))}} ]
[ {{=A('documents', _href=URL('documents', args=request.args))}} ]<br />
{{=MARKMIN(page.body)}}
<h2>Comments</h2>
{{for comment in comments:}}
  <p>{{=db.auth_user[comment.created_by].first_name}} on {{=comment.created_on}} says <i>{{=comment.body}}</i></p>
{{pass}}
<h2>Post a comment</h2>
{{=form}}

Edit:
{{extend 'layout.html'}}
<h1>Edit wiki page</h1>
[ {{=A('show', _href=URL('show', args=request.args))}} ] <br />
{{=form}}

documents:
{{extend 'layout.html'}}
<h1>Documents for page: {{=page.title}}</h1>
[ {{=A('show', _href=URL('show', args=request.args))}} ]<br />
<h2>Doucments</h2>
{{=grid}}

Thanks

Anthony

unread,
May 10, 2012, 4:37:53 PM5/10/12
to web...@googlegroups.com
@auth.requires_login()
def user():

Don't require login to get to the user() function -- if you're not logged in, it redirects to the user() function, which will result in an infinite redirect loop.

Anthony

man24

unread,
May 10, 2012, 9:54:27 PM5/10/12
to web...@googlegroups.com
Thanks Anthony.  Everything is working fine now!
Reply all
Reply to author
Forward
0 new messages