2

I am really novice in both python and web2py. My project is using angularjs for front-end, and web2py for backend as Rest Service.

I have noticed that web2py has already developed the class Auth which is used for authentication and authorization. However, if I use Rest Api, I don't really know how to re-use this class on Rest API.

For example, I try to do ajax call to register new user:

 $http.post('/myapp/authentication/register', user)

The below code does not work at all:

def register():
    return dict(form=auth.register())

I have to naively insert into auth_user table in manual manner:

def register():
    username = request.vars.username
    password = request.vars.password
    email = request.vars.email

    row = db.auth_user(username=username)
    if not row:
        db.auth_user.insert(username=username, password=password, email=email)

    else:
        raise HTTP(409, 'username exists')

This method does work out to insert new user into auth_user table. But, when I try to use method login_bare:

 login_bare(self, username, password)

It's always failed for user registered by above method. Is there any way I need to work around on this?

4

2 に答える 2

3
db.auth_user.insert(username=username, password=password, email=email)

上記では、平文のパスワードを挿入しています。ただし、デフォルトでは、db.auth_user.passwordフィールドにはCRYPT()パスワードをハッシュするバリデーターがあり、ハッシュはログイン時にチェックされます。通常、フィールド バリデーター (パスワード フィールドのCRYPTバリデーターを含む) は、フォームが送信されて処理されるときに実行されます (この場合、web2py フォームを使用して登録を送信していないため、実行されません)。ただし、バリデーターは次のように実行できます。

db.auth_user.validate_and_insert(username=username, password=password,
                                 email=email)
于 2013-08-07T13:44:27.070 に答える
0

認証テーブルにユーザー レコードを作成しているようです。しかし、ユーザーはどこにログインしていますか? 使用している認証モデルは、基本的にユーザーが UI で行うことです。最初に登録し、後でユーザー ID とパスワードでログインします。

このスタイルの承認は、いくつかの理由で REST クライアントには理想的ではありません。そのうちの 1 つは、典型的な REST クライアントはブラウザーのように動作せず、Cookie を維持しないため、セッションを維持する方法がないことです。REST クライアントが Cookie を保持するように要求することもできますが、それは奇妙です。

REST 用に構築された承認フレームワークを使用することをお勧めします。3Scale で良い結果が得られました。これにより、ユーザーとその権限を定義する方法が提供されます。ユーザーが自分のアカウントを管理するポータルを提供します (たとえば、キーを再発行できます)。そこに置くことを選択した場合は、API doco にアクセスすることもできます。

このアプローチが気に入らない場合は、Amazon が行っていることを検討してください。つまり、ユーザーごとに公開鍵と秘密鍵を発行し、クライアントが各要求に署名する方法に関するプロトコルを確立します。おそらく、オープンソースの AWS ツールからそのソリューションを引き出すことができます。

つまり、ユーザー認証フレームワークを REST で機能させる方法をおそらく見つけることができますが、それを行わない方がより良い結果が得られます。

于 2013-08-07T12:45:15.520 に答える