我用来处理用户登录和管理员登录的代码:
# if not logged in, divert to login page
if users.get_current_user() is None:
return redirect('whoami')
# if logged in, Check if user is an admin
elif not users.is_current_user_admin():
return render(request, 'template.html', {'heading': 'Bad Request (400)',
'message': ['You are not logged in as administrator'],
'user_email': users.get_current_user().email()})
当我使用Djangae appengine with Datastore (Django with datastore support)
后端时,一切正常,但是当我启用Google Identity Aware Protocol (Google IAP)
时,一切都开始失败。当我检查日志时,它表示字段email_lower上的djangae_gaedatastoreuser
中存在IntegrityError
IntegrityError: Unique constraint violation for kind djangae_gaedatastoreuser on fields: email_lower
即使google.appengine.api.users
模块开始行为不端。在第一次尝试登录时,我可以正常登录AppEngine,但我无法以谷歌帐户用户身份登出引擎,我发现我已经退出了我的Google帐户(这很棒但是)。当我尝试登录时,我发现登录时无需身份验证(Google登录)。
当我从其他浏览器实例登录时,显示
DatabaseError: save with update_fields did not affect any rows.
有人可以解释为什么会这样,以及我必须采取哪些措施来避免这种情况。
答案 0 :(得分:0)
问题在于IAP登录cookie,我做了一些调查,发现谷歌为我们提供了一个清除该cookie的网址。 您只需在从Google帐户退出后点击该网址即可:
The URL: your_appenine_url/_gcp_iap/clear_login_cookie
总结一下,
#Get current user
user = users.get_current_user()
# If user has logged in, send him to google logout URL
# redirect to clear IAP login cookie after google account logout
if user:
logout_url = users.create_logout_url('/_gcp_iap/clear_login_cookie')
request.session.clear()
return redirect(logout_url)