1

ウェブ上で何も見つからなかったので、ここで質問しています。

ユーザー名のみを必要とするカスタム認証を作成する方法はありますか?つまり、特定のサブページにログインするには、ユーザー名を入力するだけで、電子メールやパスワードなどを入力する必要はありません。

それとも、これを行うためのより良い方法はありますか?たとえば、サブページにアクセスできるのは、ユーザー名(または同様のもの)がdbテーブルに存在する場合のみですか?

4

3 に答える 3

1

はい、次のようなことができます:

(モデルファイル、またはコントローラーの上部、または関数デコレーターを作成することをお勧めします)

session.logged_in_userNone かどうかを確認します。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()、グループやパーミッションなどの使用に関心がない限り、とにかくこれが必要かどうかはわかりません。しかし、その場合は、パスワードを追加してください。 (一般的なパスワードでも空白のパスワードでも)それほど問題にはならないようです。

于 2012-12-28T17:28:41.797 に答える
1

デフォルトでは、web2py は空白のパスワードを許可します。そのため、CSS を使用して、ログイン フォームと登録フォームのパスワード フィールドを単純に非表示にします。デフォルトの認証を使用できるはずです。

于 2013-01-07T19:42:05.233 に答える