gpt4 book ai didi

python - GAE、oauth2 和管理员用户

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:10 24 4
gpt4 key购买 nike

我目前使用“Google Accounts API”允许用户登录我的 GAE 应用程序。所以我使用 users.create_login_urlusers.get_current_user 并将 ndb.UserProperty 添加到我自己的用户实体,以便我可以检索数据用户。

我现在正在切换到 oauth2(使用自动)。

切换到 oauth2 后,我不知道如何处理管理员用户。我目前使用 users.is_current_user_admin 来检测管理员用户,但如果管理员使用 oauth2 登录,那将不起作用。

我看到两个尴尬的解决方案:

  1. 继续为管理员用户使用 Google Accounts API,并让普通用户使用 oauth2 登录。

  2. 存储管理员用户的 oauth2 凭据列表(固定在代码或数据存储中),以便在使用 oauth2 登录后识别管理员用户。

是否有更好的方法或者我应该使用上述方法之一,如果是,是哪一种?

最佳答案

我将描述我最终是如何做到的,以防对其他人有帮助。

下面是我的 Login 处理程序。如果用户转到“/login”,则会显示登录按钮。当用户点击按钮时,页面会重定向到例如“/login/google”以进行 OAuth2 处理。

如果我想以管理员身份登录,那么我手动输入这个 URL“/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 %}

关于python - GAE、oauth2 和管理员用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32205404/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com