App Engine根据用户重定向登录

时间:2015-06-03 10:01:34

标签: python google-app-engine redirect

我有一个App Engine项目,我在该数据存储区中存储用户的电子邮件地址和该用户的特定重定向URL。

我想要做的是根据登录用户设置登录的重定向目的地。

q = Photos.all()
q.filter("email =", users.get_current_user().email())
q = db.GqlQuery("SELECT * FROM Photos " +
    "WHERE email = :1 ", users.get_current_user().email())
for p in q.run():

变量p.redirect然后为我提供了我希望特定用户重定向到的URL。

以下是我尝试过但显然无效,因为用户尚未登录,因此我收到以下错误AttributeError: 'NoneType' object has no attribute 'email'

    user = users.get_current_user()

    if user:
        # User is signed in             
else:
        # User is not signed in 
        q = Photos.all()
        q.filter("email =", users.get_current_user().email())
        q = db.GqlQuery("SELECT * FROM Photos " +
            "WHERE email = :1 ", users.get_current_user().email())
        for p in q.run():
            url = users.create_login_url(p.redirect)

template_values = {
    'url': url,
    }

任何帮助将不胜感激。我一直在使用Python& App Engine几天,所以我可能会遗漏一些非常明显的东西。

3 个答案:

答案 0 :(得分:1)

将您的资源(例如:/ photos)标记为登录:app.yaml中需要。然后,Appengine会将用户重定向到登录页面,一旦完成登录,将返回到您的资源(/照片),届时您将收到当前用户的电子邮件。

https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Requiring_login_or_administrator_status

答案 1 :(得分:0)

我通过添加新的重定向处理程序解决了这个问题,因此登录重定向现在是url = users.create_login_url('/authorise')

/authorise内,我运行GQL查询并将用户传递到目的地。

虽然我有兴趣知道是否有更有效的方法,但它仍然有效。

答案 2 :(得分:0)

您的if声明是倒退的:

if user:
    # User is signed in             
    q = Photos.all()
    q.filter("email =", users.get_current_user().email())
    q = db.GqlQuery("SELECT * FROM Photos " +
        "WHERE email = :1 ", users.get_current_user().email())
    for p in q.run():
        url = users.create_login_url(p.redirect)
else:
    # User is not signed in 
相关问题