ウェブ上で何も見つからなかったので、ここで質問しています。
ユーザー名のみを必要とするカスタム認証を作成する方法はありますか?つまり、特定のサブページにログインするには、ユーザー名を入力するだけで、電子メールやパスワードなどを入力する必要はありません。
それとも、これを行うためのより良い方法はありますか?たとえば、サブページにアクセスできるのは、ユーザー名(または同様のもの)がdbテーブルに存在する場合のみですか?
ウェブ上で何も見つからなかったので、ここで質問しています。
ユーザー名のみを必要とするカスタム認証を作成する方法はありますか?つまり、特定のサブページにログインするには、ユーザー名を入力するだけで、電子メールやパスワードなどを入力する必要はありません。
それとも、これを行うためのより良い方法はありますか?たとえば、サブページにアクセスできるのは、ユーザー名(または同様のもの)がdbテーブルに存在する場合のみですか?
はい、次のようなことができます:
(モデルファイル、またはコントローラーの上部、または関数デコレーターを作成することをお勧めします)
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
完全な例を次に示します (未テスト):
モデル/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}))
コントローラー/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)
ビュー/デフォルト/login.html
{{ extend 'layout.html' }}
{{ =form }}
コードをモデル ファイルに配置することで、すべてのページ リクエストでコードが実行されるようにすることができます。
これにより、web2py の認証メカニズム (すなわち ) を使用することはできなくなりますがauth = AUTH()
、グループやパーミッションなどの使用に関心がない限り、とにかくこれが必要かどうかはわかりません。しかし、その場合は、パスワードを追加してください。 (一般的なパスワードでも空白のパスワードでも)それほど問題にはならないようです。
デフォルトでは、web2py は空白のパスワードを許可します。そのため、CSS を使用して、ログイン フォームと登録フォームのパスワード フィールドを単純に非表示にします。デフォルトの認証を使用できるはずです。