用户身份验证最佳做法

Kar*_*lik 0 python google-app-engine webapp2

我在GAE上有一个应用程序,用于检查管理员是否在调用任何网页之前登录.我已经尝试了各种方法来管理登录过程.

Q1 - 我在第二个例子中的装饰师做错了什么?
Q2 - 人们通常也会对帖子功能进行检查吗?

之前我在每个get函数中使用了if语句.问题是我会在每个函数中反复重复这个if语句.

class IncomePage(webapp2.RequestHandler):
  def get(self):
    if users.is_current_user_admin():
      self.response.write('My Webpage')
    else:
      self.response.write('Please Login')
Run Code Online (Sandbox Code Playgroud)

然后我试着让装饰师为我做这件事.它没有用,所以我做错了什么.

def check(func):
  if users.is_current_user_admin():
    return func
  else:
    response.write('Please Login') ### Doesn't work

class IncomePage(webapp2.RequestHandler):
  @check
  def get(self):
      self.response.write('My Webpage')
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 5

那不是装饰者.装饰器需要返回一个代替实际函数调用的包装函数,它是需要进行测试然后调用原始函数的包装器.

def check(func):
  def wrapper(*args, **kwargs):
    if users.is_current_user_admin():
      return func(*args, **kwargs)
    else:
      response.write('Please Login')
  return wrapper
Run Code Online (Sandbox Code Playgroud)