python - Web2Py 最小用户身份验证(仅限用户名)

标签 python database authentication web2py

我在网上没有找到任何东西,所以我在这里问。

有没有一种方法可以创建只需要用户名的自定义身份验证?这意味着登录到特定子页面只需输入用户名,无需电子邮件和密码等?

或者有更好的方法吗?例如。仅当用户名(或类似用户名)存在于数据库表中时才能访问子页面?

最佳答案

是的,你可以这样做:

(在模型文件中,或者在 Controller 的顶部,或者更好地制作一个函数装饰器)

检查 session.logged_in_user 看它是否为 None,如果为 None,则重定向到/default/login,在那里您向用户显示一个表单:

form = FORM(Field('username'), requires=IS_IN_DB(db, db.users.username))

在提交表单时(请参阅表单处理的 web2py 手册),如果有效(例如,如果用户名存在于 db.users 表中),则设置 session.logged_in_user = request.vars.username

这是一个完整的例子(未经测试):

models/Auth.py

# Could also check whether session.logged_in_user exists in DB, but probably not needed
# If so though, should be renamed zAuth or something to come after db.py file
if not session or not session.logged_in_user:
  redirect(URL('default','login', vars={'next':request.vars.url}))

controllers/default.py

#in file: controllers/default.py
...
def login():
   form = FORM(Field('username', requires=IS_IN_DB(db, db.users.username))

   if form.process().accepted:
     session.logged_in_user = form.vars.username
     redirect(request.vars.next)
   elif form.errors:
     session.logged_in_user = None # not necessary, but oh well
     response.flash = "Please enter a valid username"

   return dict(form=form)

views/default/login.html

{{ extend 'layout.html' }}
{{ =form }}

通过将代码放在模型文件中,您可以确保它在每次页面请求时执行。

这将不允许您使用 web2py 的身份验证机制(即 auth = AUTH()),但我不确定您是否需要它,除非您对使用组和权限等。但如果是这样的话,添加密码(即使是通用密码或空白密码)似乎也不会太麻烦。

关于python - Web2Py 最小用户身份验证(仅限用户名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14028015/

相关文章:

python - Python 中的 Unicode 到原始字符

python - SQLite3 数据库如何合并?

django - 使用 MongoEngine 创建用户注册页面

python - 使用 Python 在闭区间上查找函数的最小值

python - 当函数退出时,对函数中的变量所做的更改将恢复

python - 如何将图形从 IPython Notebook 导出到文件

敏感数据的 MySQL 数据库安全性

database - 如何从 Progress 数据库中获取 ROWID

android - Paypal 集成登录失败错误?

php - Laravel 手动登录功能