6

TastyPie 経由で Django と通信する Adob​​e Air モバイル アプリケーションがあります。アプリを使用するには、最初に登録する必要があります。したがって、彼らは自分の電子メールとパスワードを提供する必要があります。その後、彼らは「ログイン」できるようになります。成功したユーザー名とパスワードの組み合わせを入力した後、api-key がキャッシュされるモバイルアプリに返され、ユーザーが「ログイン」するのが最善のアイデアだと思いました。

ユーザーを登録して「ログイン」するためのより良い方法があれば教えてください。

Django 内には、POST 経由でデータを送信するときに新しいユーザーを登録するために使用する UserRessource クラスがあります。

class UserResource(ModelResource):
    class Meta:
        allowed_methods = ['get', 'post']
        queryset = User.objects.all()
        resource_name = 'auth'
        authentication = Authentication()
        authorization = Authorization()
        fields = ['username', 'email']

    def obj_create(self, bundle, request=None, **kwargs):
        username, email, password = bundle.data['username'], bundle.data['password'], bundle.data['password'], 
        try:
            bundle.obj = User.objects.create_user(username, email, password)
        except IntegrityError:
            raise BadRequest('That username already exists')
        return bundle

それは非常にうまく機能します。

しかし今、実際のログインプロセスに苦労しています。私の意見では、ユーザー名とパスワードを GET (および https) 経由でこのリソースに送信し、それらが有効な場合はユーザーの API キーを返すのが最善です。しかし、それは可能でしょうか?そしてそれはきれいですか?通常、TastyPie は、そのリソースに GET リクエストを送信すると、現在 DB にあるすべてのユーザーを表示します。しかし、そのデータは必要ないので、どうにか上書きできます。私はすでにhttp://django-tastypie.readthedocs.org/en/v0.9.9/resources.htmlをチェックしましたが、動作しません。その振る舞いを上書きすることさえ可能ですか?

したがって、実際の質問は、ApiKeyAuthentication を使用してユーザーを「サインイン」する最良の方法は何ですか? そして、私のアプローチは正しくてクリーンですか、それともより良い方法がありますか? この場合の例はありますか?

よろしくお願いします!

4

2 に答える 2

1

さて、このトピックに関する私の見解を説明しようと思います:

まず、tastypie ページの UserResource の例には、1 つの重要な問題があります: ユーザー オブジェクトは、いつでも単一のユーザーに提示されるべきではありません。彼らが自分の「プロフィール」か何かであることを確認しますが、他の人を閲覧したり見たりしないでください。もちろん、そのリソースのメインの「リスト ビュー」をクリアし、APIKeyAuth を個々のプロファイルに適用することで、UserResource を使用して実行できますが、それでも UserResource のアイデアは好きではありません。

API を開発している場合 (tastypie の使用法など) のフォームの 2 番目は、APIKey が実際の「パスワード」であるため、要求に応じて送信する必要があるのは、ユーザー名とパスワードではなく、他の方法で取得されたユーザー名と APIKey です(通常は電子メールまたは何らかの Web サイト ベースの UI です)。GET パラメータではなく、Authorization ヘッダー経由で送信することをお勧めします。

第 3 に、API について話している場合、サインインのようなものはありません。少なくとも RESTFULL API にはありません。ある意味ではコネクションレスであるため、実際には各リクエストで Authorization ヘッダーを送信します。はいという質問に関しては、データを上書きできます。Tastypie ドキュメントの水和/脱水サイクルを見て、コンテンツがどのようにレンダリングされるかを理解してください。さらに質問がある場合は、質問してください。

于 2012-09-06T12:00:57.170 に答える