我目前使用“Google Accounts API”来允许用户登录我的GAE应用。因此,我使用users.create_login_url
和users.get_current_user
并向我自己的用户实体添加ndb.UserProperty
,以便我可以检索该用户的数据。
我现在正在切换到oauth2(使用authomatic)。
切换到oauth2后,我不知道如何处理管理员用户。我目前使用users.is_current_user_admin
来检测管理员用户,但如果管理员使用oauth2登录,则无法使用。
我看到两个尴尬的解决方案:
继续为管理员用户使用Google帐户API,并让常规用户使用oauth2登录。
为管理员用户存储oauth2凭据列表(在代码或数据存储中硬连线),以便在使用oauth2登录后识别管理员用户。
有没有更好的方法或者我应该使用上述之一,如果有,哪一个?
答案 0 :(得分:1)
我将描述我最终是如何做的,以防其他人有所帮助。
下面是我的Login
处理程序。如果用户进入" / login"然后它显示登录按钮。当用户点击按钮时,该页面重定向到例如" / login / google"做OAuth2处理。
如果我想以管理员身份登录,那么我手动输入此网址" / login / gae"。
class Login(webapp2.RequestHandler):
def get(self, provider=None):
# Show the login page and allow the user to select a provider
if not provider:
template = JINJA_ENVIRONMENT.get_template("login.html")
self.response.write(template.render())
# Only for admin login. Use app engine login.
elif provider == "gae":
self.redirect(users.create_login_url("/"))
# The user has selected a provider so we do oauth2 login.
else:
session = Webapp2Session(self, session=self.session)
result = authomatic.login(Webapp2Adapter(self),
provider,
session=session,
session_saver=session.save)
...
要允许管理员注销,我通过创建此模板变量有条件地在我的网页上注册管理员注销:
logout_url = users.create_logout_url("/") if users.is_current_user_admin() else None
并将其添加到我的页面模板中:
{% if logout_url %}
<li><a href="{{ logout_url }}">Admin Logout</a></li>
{% endif %}